leanplum_api 3.0.2 → 3.0.3
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 +3 -3
- data/lib/leanplum_api/api.rb +28 -18
- data/lib/leanplum_api/configuration.rb +8 -8
- data/lib/leanplum_api/{connections/production.rb → connection.rb} +12 -13
- data/lib/leanplum_api/faraday_middleware/response_validation.rb +1 -0
- data/lib/leanplum_api/version.rb +1 -1
- data/spec/api_spec.rb +3 -11
- data/spec/fixtures/vcr/export_data.yml +16 -11
- data/spec/fixtures/vcr/export_data_dates.yml +16 -12
- data/spec/fixtures/vcr/export_user.yml +11 -9
- data/spec/fixtures/vcr/get_ab_test.yml +12 -8
- data/spec/fixtures/vcr/get_ab_tests.yml +12 -8
- data/spec/fixtures/vcr/get_export_results.yml +13 -9
- data/spec/fixtures/vcr/get_messages.yml +11 -9
- data/spec/fixtures/vcr/get_vars.yml +13 -49
- data/spec/fixtures/vcr/missing_message.yml +10 -10
- data/spec/fixtures/vcr/reset_anomalous_user.yml +13 -9
- data/spec/fixtures/vcr/set_user_attributes.yml +13 -11
- data/spec/fixtures/vcr/track_events.yml +18 -14
- data/spec/fixtures/vcr/track_events_and_attributes.yml +17 -15
- data/spec/fixtures/vcr/track_events_anomaly_overrider.yml +31 -23
- data/spec/fixtures/vcr/track_offline_events.yml +18 -14
- data/spec/http_spec.rb +8 -5
- data/spec/spec_helper.rb +1 -1
- metadata +3 -6
- data/lib/leanplum_api/connections/content_read_only.rb +0 -15
- data/lib/leanplum_api/connections/data_export.rb +0 -15
- data/lib/leanplum_api/connections/development.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 981ece28774e6f0627530dc0410181d5eeb52522
|
4
|
+
data.tar.gz: dcaf55c062c0a533973f1a3f8e0118542d8ed3ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa4dbf8587246f8a4b6cd6f18e5c7ffd6f3737a72358386131572a1f59fe50997d07d881bfd077f4c274a23945c96f4f6a5c3403a1c475672f1f39b7eaafa057
|
7
|
+
data.tar.gz: 5e6836dc8850193e3a1313de6bf1db2a2eeeca8fd49fdc6801482548d14ce2aac518b8efc1683d91f52e6149a14d0f380538be4f25b3923e37a53bec1558cfa5
|
data/README.md
CHANGED
@@ -66,7 +66,7 @@ attribute_hash = {
|
|
66
66
|
}
|
67
67
|
api.set_user_attributes(attribute_hash)
|
68
68
|
|
69
|
-
# You must also provide the :event property for event tracking.
|
69
|
+
# You must also provide the :event property for event tracking.
|
70
70
|
## :info is an optional property for an extra string.
|
71
71
|
## You can optionally provide a :time; if it is not set Leanplum will timestamp the event "now".
|
72
72
|
## All other key/values besides :user_id, :device_id, :event, and :time will be sent as event params.
|
@@ -96,7 +96,7 @@ api.track_events(event, force_anomalous_override: true)
|
|
96
96
|
```ruby
|
97
97
|
api = LeanplumApi::API.new
|
98
98
|
job_id = api.export_data(start_time, end_time)
|
99
|
-
response =
|
99
|
+
response = wait_for_export_job(job_id)
|
100
100
|
```
|
101
101
|
|
102
102
|
**Note well that Leanplum now officially recommends use of the automated S3 export instead of API based export.** According to a Leanplum engineer these two data export methodologies are completely independent data paths and in our experience we have found API based data export to be missing 10-15% of the data that is eventually returned by the automated export.
|
@@ -110,8 +110,8 @@ To write _new_ specs (or regenerate one of [VCR](https://github.com/vcr/vcr)'s Y
|
|
110
110
|
> BE AWARE THAT IF YOU WRITE A NEW SPEC OR DELETE A VCR FILE, IT'S POSSIBLE THAT REAL DATA WILL BE WRITTEN TO THE `LEANPLUM_APP_ID` YOU CONFIGURE! Certainly a real request will be made to rebuild the VCR file, and while specs run with ```devMode=true```, it's usually a good idea to create a fake app for testing/running specs against.
|
111
111
|
|
112
112
|
```bash
|
113
|
-
export LEANPLUM_PRODUCTION_KEY=dev_somethingsomeg123456
|
114
113
|
export LEANPLUM_APP_ID=app_somethingsomething2039410238
|
114
|
+
export LEANPLUM_PRODUCTION_KEY=dev_somethingsomeg123456
|
115
115
|
export LEANPLUM_DATA_EXPORT_KEY=data_something_3238mmmX
|
116
116
|
export LEANPLUM_CONTENT_READ_ONLY_KEY=sometingsome23xx9
|
117
117
|
export LEANPLUM_DEVELOPMENT_KEY=sometingsome23xx923n23i
|
data/lib/leanplum_api/api.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module LeanplumApi
|
2
2
|
class API
|
3
|
+
extend Gem::Deprecate
|
4
|
+
|
5
|
+
class LeanplumValidationException < RuntimeError; end
|
6
|
+
|
3
7
|
EXPORT_PENDING = 'PENDING'
|
4
8
|
EXPORT_RUNNING = 'RUNNING'
|
5
9
|
EXPORT_FINISHED = 'FINISHED'
|
6
10
|
|
7
|
-
class LeanplumValidationException < RuntimeError; end
|
8
|
-
|
9
11
|
def initialize(options = {})
|
10
12
|
fail 'LeanplumApi not configured yet!' unless LeanplumApi.configuration
|
11
13
|
end
|
@@ -18,24 +20,21 @@ module LeanplumApi
|
|
18
20
|
track_multi(events, nil, options)
|
19
21
|
end
|
20
22
|
|
21
|
-
# This method is for tracking events and/or updating user attributes at the same time, batched together like
|
22
|
-
# recommends.
|
23
|
-
# Set the :force_anomalous_override to catch warnings from leanplum about anomalous events and force them to
|
24
|
-
# be considered anomalous
|
23
|
+
# This method is for tracking events and/or updating user attributes at the same time, batched together like
|
24
|
+
# leanplum recommends.
|
25
|
+
# Set the :force_anomalous_override option to catch warnings from leanplum about anomalous events and force them to
|
26
|
+
# not be considered anomalous.
|
25
27
|
def track_multi(events = nil, user_attributes = nil, options = {})
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
request_data = user_attributes.map { |h| build_user_attributes_hash(h) }
|
30
|
-
request_data += events.map { |h| build_event_attributes_hash(h, options) }
|
28
|
+
request_data = Array.wrap(user_attributes).map { |h| build_user_attributes_hash(h) } +
|
29
|
+
Array.wrap(events).map { |h| build_event_attributes_hash(h, options) }
|
31
30
|
response = production_connection.multi(request_data).body['response']
|
32
31
|
|
33
32
|
if options[:force_anomalous_override]
|
34
33
|
user_ids_to_reset = []
|
35
34
|
response.each_with_index do |indicator, i|
|
36
35
|
# Leanplum's engineering team likes to break their API and or change stuff without warning (often)
|
37
|
-
# and has no idea what "versioning" actually means, so we just reset
|
38
|
-
#
|
36
|
+
# and has no idea what "versioning" actually means, so we just reset everyone all the time.
|
37
|
+
# This condition should be:
|
39
38
|
# if indicator['warning'] && indicator['warning']['message'] =~ /Past event detected/i
|
40
39
|
#
|
41
40
|
# but it has to be:
|
@@ -98,6 +97,7 @@ module LeanplumApi
|
|
98
97
|
|
99
98
|
def get_export_results(job_id)
|
100
99
|
response = data_export_connection.get(action: 'getExportResults', jobId: job_id).body['response'].first
|
100
|
+
|
101
101
|
if response['state'] == EXPORT_FINISHED
|
102
102
|
LeanplumApi.configuration.logger.info("Export finished.")
|
103
103
|
LeanplumApi.configuration.logger.debug(" Response: #{response}")
|
@@ -113,7 +113,7 @@ module LeanplumApi
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
-
def
|
116
|
+
def wait_for_export_job(job_id, polling_interval = 60)
|
117
117
|
while get_export_results(job_id)[:state] != EXPORT_FINISHED
|
118
118
|
LeanplumApi.configuration.logger.debug("Polling job #{job_id}: #{get_export_results(job_id)}")
|
119
119
|
sleep(polling_interval)
|
@@ -121,6 +121,12 @@ module LeanplumApi
|
|
121
121
|
get_export_results(job_id)
|
122
122
|
end
|
123
123
|
|
124
|
+
# Remove in version 4.x
|
125
|
+
def wait_for_job(job_id, polling_interval = 60)
|
126
|
+
wait_for_export_job(job_id, polling_interval)
|
127
|
+
end
|
128
|
+
deprecate :wait_for_job, 'wait_for_export_job', 2018, 6
|
129
|
+
|
124
130
|
def user_attributes(user_id)
|
125
131
|
export_user(user_id)['userAttributes'].inject({}) do |attrs, (k, v)|
|
126
132
|
# Leanplum doesn't use true JSON for booleans...
|
@@ -181,21 +187,25 @@ module LeanplumApi
|
|
181
187
|
private
|
182
188
|
|
183
189
|
def production_connection
|
184
|
-
|
190
|
+
fail "production_key not configured!" unless LeanplumApi.configuration.production_key
|
191
|
+
@production ||= Connection.new(LeanplumApi.configuration.production_key)
|
185
192
|
end
|
186
193
|
|
187
194
|
# Only instantiated for data export endpoint calls
|
188
195
|
def data_export_connection
|
189
|
-
|
196
|
+
fail "data_export_key not configured!" unless LeanplumApi.configuration.data_export_key
|
197
|
+
@data_export ||= Connection.new(LeanplumApi.configuration.data_export_key)
|
190
198
|
end
|
191
199
|
|
192
200
|
# Only instantiated for ContentReadOnly calls (AB tests)
|
193
201
|
def content_read_only_connection
|
194
|
-
|
202
|
+
fail "content_read_only_key not configured!" unless LeanplumApi.configuration.content_read_only_key
|
203
|
+
@content_read_only ||= Connection.new(LeanplumApi.configuration.content_read_only_key)
|
195
204
|
end
|
196
205
|
|
197
206
|
def development_connection
|
198
|
-
|
207
|
+
fail "development_key not configured!" unless LeanplumApi.configuration.development_key
|
208
|
+
@development ||= Connection.new(LeanplumApi.configuration.development_key)
|
199
209
|
end
|
200
210
|
|
201
211
|
# Deletes the user_id and device_id key/value pairs from the hash parameter.
|
@@ -1,19 +1,19 @@
|
|
1
1
|
module LeanplumApi
|
2
2
|
class << self
|
3
3
|
attr_accessor :configuration
|
4
|
-
end
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
def configure
|
6
|
+
self.configuration ||= Configuration.new
|
7
|
+
yield(configuration) if block_given?
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
def reset!
|
11
|
+
self.configuration = Configuration.new
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
15
|
class Configuration
|
16
|
-
DEFAULT_LEANPLUM_API_VERSION = '1.0.6'
|
16
|
+
DEFAULT_LEANPLUM_API_VERSION = '1.0.6'.freeze
|
17
17
|
|
18
18
|
# Required IDs and access keys provided by leanplum
|
19
19
|
attr_accessor :app_id
|
@@ -1,9 +1,13 @@
|
|
1
|
-
module LeanplumApi
|
2
|
-
class
|
3
|
-
LEANPLUM_API_PATH = '/api'
|
1
|
+
module LeanplumApi
|
2
|
+
class Connection
|
3
|
+
LEANPLUM_API_PATH = '/api'.freeze
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
@
|
5
|
+
def initialize(client_key)
|
6
|
+
@client_key = client_key
|
7
|
+
end
|
8
|
+
|
9
|
+
def get(query)
|
10
|
+
connection.get(LEANPLUM_API_PATH, query.merge(authentication_params))
|
7
11
|
end
|
8
12
|
|
9
13
|
def multi(payload)
|
@@ -12,24 +16,19 @@ module LeanplumApi::Connection
|
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
connection.get(LEANPLUM_API_PATH, query.merge(authentication_params))
|
17
|
-
end
|
19
|
+
private
|
18
20
|
|
19
21
|
def authentication_params
|
20
22
|
{
|
21
23
|
appId: LeanplumApi.configuration.app_id,
|
22
|
-
clientKey:
|
24
|
+
clientKey: @client_key,
|
23
25
|
apiVersion: LeanplumApi.configuration.api_version,
|
24
26
|
devMode: LeanplumApi.configuration.developer_mode
|
25
27
|
}
|
26
28
|
end
|
27
29
|
|
28
|
-
private
|
29
|
-
|
30
30
|
def connection
|
31
31
|
fail 'APP_ID not configured!' unless LeanplumApi.configuration.app_id
|
32
|
-
fail 'PRODUCTION_KEY not configured!' unless LeanplumApi.configuration.production_key
|
33
32
|
|
34
33
|
options = {
|
35
34
|
url: 'https://www.leanplum.com',
|
@@ -43,7 +42,7 @@ module LeanplumApi::Connection
|
|
43
42
|
connection.request :leanplum_response_validation
|
44
43
|
connection.request :json
|
45
44
|
|
46
|
-
connection.response :logger,
|
45
|
+
connection.response :logger, LeanplumApi.configuration.logger, bodies: true if LeanplumApi.configuration.api_debug
|
47
46
|
connection.response :json, :content_type => /\bjson$/
|
48
47
|
|
49
48
|
connection.adapter Faraday.default_adapter
|
@@ -18,6 +18,7 @@ module LeanplumApi
|
|
18
18
|
fail BadResponseError, response.inspect unless response.status == 200 && response.body['response']
|
19
19
|
fail BadResponseError, "No :success key in #{response.inspect}!" unless response.body['response'].is_a?(Array) && response.body['response'].first.has_key?('success')
|
20
20
|
fail BadResponseError, "Not a success! Response: #{response.inspect}" unless response.body['response'].first['success'] == true
|
21
|
+
|
21
22
|
validate_operation_success(operations, response) if operations
|
22
23
|
end
|
23
24
|
end
|
data/lib/leanplum_api/version.rb
CHANGED
data/spec/api_spec.rb
CHANGED
@@ -156,7 +156,7 @@ describe LeanplumApi::API do
|
|
156
156
|
context 'user_events' do
|
157
157
|
it 'should get user events for this user' do
|
158
158
|
VCR.use_cassette('export_user') do
|
159
|
-
expect(api.user_events(first_user_id)[purchase].keys).to eq(['count'])
|
159
|
+
expect(api.user_events(first_user_id)[purchase].keys).to eq(['firstTime', 'count', 'lastTime'])
|
160
160
|
end
|
161
161
|
end
|
162
162
|
end
|
@@ -171,25 +171,17 @@ describe LeanplumApi::API do
|
|
171
171
|
end
|
172
172
|
|
173
173
|
context 'data export methods' do
|
174
|
-
around(:all) do |example|
|
175
|
-
LeanplumApi.configure do |c|
|
176
|
-
c.developer_mode = false
|
177
|
-
end
|
178
|
-
example.run
|
179
|
-
LeanplumApi.configure { |c| c.developer_mode = true }
|
180
|
-
end
|
181
|
-
|
182
174
|
context 'export_data' do
|
183
175
|
context 'regular export' do
|
184
176
|
it 'should request a data export job with a starttime' do
|
185
177
|
VCR.use_cassette('export_data') do
|
186
|
-
expect { api.export_data(Time.at(1438660800).utc) }.to raise_error LeanplumApi::
|
178
|
+
expect { api.export_data(Time.at(1438660800).utc) }.to raise_error LeanplumApi::BadResponseError
|
187
179
|
end
|
188
180
|
end
|
189
181
|
|
190
182
|
it 'should request a data export job with start and end dates' do
|
191
183
|
VCR.use_cassette('export_data_dates') do
|
192
|
-
expect { api.export_data(Date.new(
|
184
|
+
expect { api.export_data(Date.new(2017, 8, 5), Date.new(2017, 8, 6)) }.to_not raise_error
|
193
185
|
end
|
194
186
|
end
|
195
187
|
end
|
@@ -8,33 +8,38 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
15
15
|
- "*/*"
|
16
16
|
response:
|
17
17
|
status:
|
18
|
-
code:
|
19
|
-
message:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
20
|
headers:
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- e87e99bf7869f537a17983d4c3779707
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxDoAyCtl9jMBQ; expires=Tue, 06-Oct-2020 17:33:33 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:33 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '96'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:33 GMT
|
29
37
|
Cache-Control:
|
30
38
|
- private
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
35
39
|
body:
|
36
40
|
encoding: UTF-8
|
37
|
-
string: '{"response":[{"error":{"message":"
|
41
|
+
string: '{"response":[{"error":{"message":"You cannot export data older than
|
42
|
+
60 days"},"success":false}]}'
|
38
43
|
http_version:
|
39
|
-
recorded_at:
|
44
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
45
|
recorded_with: VCR 3.0.3
|
@@ -2,39 +2,43 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://www.leanplum.com/api?action=exportData&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DATA_EXPORT_KEY>&devMode=false&endDate=
|
5
|
+
uri: https://www.leanplum.com/api?action=exportData&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DATA_EXPORT_KEY>&devMode=false&endDate=20170806&startDate=20170805
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
15
15
|
- "*/*"
|
16
16
|
response:
|
17
17
|
status:
|
18
|
-
code:
|
19
|
-
message:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
20
|
headers:
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- 8184014402cee4aaa004b8db0c7fa518
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxD-BCCul9jMBQ; expires=Tue, 06-Oct-2020 17:33:34 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:34 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '85'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:34 GMT
|
29
37
|
Cache-Control:
|
30
38
|
- private
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
35
39
|
body:
|
36
40
|
encoding: UTF-8
|
37
|
-
string: '{"response":[{"
|
41
|
+
string: '{"response":[{"jobId":"export_4727756026281984_1504277415450767360","success":true}]}'
|
38
42
|
http_version:
|
39
|
-
recorded_at:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,22 +21,24 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
25
|
X-Cloud-Trace-Context:
|
26
|
-
-
|
26
|
+
- 821f167b9c66879b30679054f7b7b692
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxCUBSCpl9jMBQ; expires=Tue, 06-Oct-2020 17:33:29 GMT; path=/
|
27
29
|
Date:
|
28
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:29 GMT
|
29
31
|
Server:
|
30
32
|
- Google Frontend
|
31
33
|
Content-Length:
|
32
|
-
- '
|
34
|
+
- '454'
|
33
35
|
Expires:
|
34
|
-
-
|
36
|
+
- Thu, 17 Aug 2017 21:33:29 GMT
|
35
37
|
Cache-Control:
|
36
38
|
- private
|
37
39
|
body:
|
38
40
|
encoding: UTF-8
|
39
|
-
string: '{"response":[{"totalSessions":0,"created":1.43935302887E9,"events":{"purchase":{"count":
|
40
|
-
http_version:
|
41
|
-
recorded_at:
|
41
|
+
string: '{"response":[{"totalSessions":0,"created":1.43935302887E9,"events":{"purchase":{"firstTime":1.460514593026E9,"count":36,"lastTime":1.503005506018E9}},"unsubscribeChannels":[],"userId":"123456","lastActive":1.446709787966E9,"states":{},"userBucket":358,"devices":[],"success":true,"userAttributes":{"first_name":"Mike","create_date":"2010-01-01","email":"still_tippin@test.com","last_name":"Jones","gender":"m","is_tipping":"True"},"timeSpentInApp":0.0}]}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
42
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,20 +21,24 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- 255c8fa75fc030d09d96ef436bfecbb2
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxDkBCCwl9jMBQ; expires=Tue, 06-Oct-2020 17:33:36 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:36 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '44'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:36 GMT
|
29
37
|
Cache-Control:
|
30
38
|
- private
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
35
39
|
body:
|
36
40
|
encoding: UTF-8
|
37
41
|
string: '{"response":[{"abTests":[],"success":true}]}'
|
38
42
|
http_version:
|
39
|
-
recorded_at:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,20 +21,24 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- e6ae12b1a7b12094b3d4ae7f38fc28bf
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxCkAyCwl9jMBQ; expires=Tue, 06-Oct-2020 17:33:36 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:36 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '44'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:36 GMT
|
29
37
|
Cache-Control:
|
30
38
|
- private
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
35
39
|
body:
|
36
40
|
encoding: UTF-8
|
37
41
|
string: '{"response":[{"abTests":[],"success":true}]}'
|
38
42
|
http_version:
|
39
|
-
recorded_at:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,20 +21,24 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- 99791af56ed96a2e814f36bba5e43e5c
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxC5ASCvl9jMBQ; expires=Tue, 06-Oct-2020 17:33:35 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:35 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '268'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:35 GMT
|
29
37
|
Cache-Control:
|
30
38
|
- private
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
35
39
|
body:
|
36
40
|
encoding: UTF-8
|
37
|
-
string: '{"response":[{"files":["https
|
41
|
+
string: '{"response":[{"files":["https://leanplum_export.storage.googleapis.com/export-4727756026281984-d5969d55-f242-48a6-85a3-165af08e2306-output-0"],"jobId":"export_4727756026281984_2904941266315269120","numBytes":36590,"state":"FINISHED","success":true,"numSessions":101}]}'
|
38
42
|
http_version:
|
39
|
-
recorded_at:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,23 +21,25 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
25
|
X-Cloud-Trace-Context:
|
26
|
-
-
|
26
|
+
- 2be9d7df703848967473640cd9e1ed4b
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxDkAyCxl9jMBQ; expires=Tue, 06-Oct-2020 17:33:37 GMT; path=/
|
27
29
|
Date:
|
28
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:37 GMT
|
29
31
|
Server:
|
30
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '165'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:37 GMT
|
31
37
|
Cache-Control:
|
32
38
|
- private
|
33
|
-
Alt-Svc:
|
34
|
-
- quic=":443"; ma=2592000; v="35,34,33,32,31,30,29,28,27,26,25"
|
35
|
-
Transfer-Encoding:
|
36
|
-
- chunked
|
37
39
|
body:
|
38
40
|
encoding: UTF-8
|
39
41
|
string: '{"response":[{"success":true,"messages":[{"id":5670583287676928,"created":1.440091595799E9,"name":"New
|
40
42
|
Message","active":false,"messageType":"Push Notification"}]}]}'
|
41
43
|
http_version:
|
42
|
-
recorded_at:
|
44
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
43
45
|
recorded_with: VCR 3.0.3
|
@@ -1,45 +1,5 @@
|
|
1
1
|
---
|
2
2
|
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1439352000
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: '{"data":[{"userId":123456,"action":"setUserAttributes","userAttributes":{"first_name":"Mike","last_name":"Jones","gender":"m","email":"still_tippin@test.com","create_date":"2010-01-01"}}]}'
|
9
|
-
headers:
|
10
|
-
User-Agent:
|
11
|
-
- Faraday v0.9.2
|
12
|
-
Content-Type:
|
13
|
-
- application/json
|
14
|
-
Accept-Encoding:
|
15
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
-
Accept:
|
17
|
-
- "*/*"
|
18
|
-
response:
|
19
|
-
status:
|
20
|
-
code: 200
|
21
|
-
message: OK
|
22
|
-
headers:
|
23
|
-
Access-Control-Allow-Origin:
|
24
|
-
- "*"
|
25
|
-
Content-Type:
|
26
|
-
- application/json
|
27
|
-
Date:
|
28
|
-
- Fri, 01 Jul 2016 14:59:29 GMT
|
29
|
-
Server:
|
30
|
-
- Google Frontend
|
31
|
-
Cache-Control:
|
32
|
-
- private
|
33
|
-
Alt-Svc:
|
34
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
35
|
-
Transfer-Encoding:
|
36
|
-
- chunked
|
37
|
-
body:
|
38
|
-
encoding: UTF-8
|
39
|
-
string: '{"response":[{"success":true,"warning":{"message":"Anomaly detected:
|
40
|
-
time skew. User will be excluded from analytics."}}]}'
|
41
|
-
http_version:
|
42
|
-
recorded_at: Wed, 12 Aug 2015 04:00:00 GMT
|
43
3
|
- request:
|
44
4
|
method: get
|
45
5
|
uri: https://www.leanplum.com/api?action=getVars&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&userId=123456
|
@@ -48,7 +8,7 @@ http_interactions:
|
|
48
8
|
string: ''
|
49
9
|
headers:
|
50
10
|
User-Agent:
|
51
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
52
12
|
Accept-Encoding:
|
53
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
54
14
|
Accept:
|
@@ -61,20 +21,24 @@ http_interactions:
|
|
61
21
|
Access-Control-Allow-Origin:
|
62
22
|
- "*"
|
63
23
|
Content-Type:
|
64
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- d92d025319adee1119428bcc10cfe581
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxD7ASCvl9jMBQ; expires=Tue, 06-Oct-2020 17:33:35 GMT; path=/
|
65
29
|
Date:
|
66
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:35 GMT
|
67
31
|
Server:
|
68
32
|
- Google Frontend
|
33
|
+
Content-Length:
|
34
|
+
- '123'
|
35
|
+
Expires:
|
36
|
+
- Thu, 17 Aug 2017 21:33:35 GMT
|
69
37
|
Cache-Control:
|
70
38
|
- private
|
71
|
-
Alt-Svc:
|
72
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
73
|
-
Transfer-Encoding:
|
74
|
-
- chunked
|
75
39
|
body:
|
76
40
|
encoding: UTF-8
|
77
|
-
string: '{"response":[{"vars":{},"interfaceRules":[],"variants":[],"
|
41
|
+
string: '{"response":[{"vars":{},"interfaceRules":[],"variants":[],"regions":{},"success":true,"messages":{},"interfaceEvents":[]}]}'
|
78
42
|
http_version:
|
79
|
-
recorded_at:
|
43
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
80
44
|
recorded_with: VCR 3.0.3
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -21,20 +21,20 @@ http_interactions:
|
|
21
21
|
Access-Control-Allow-Origin:
|
22
22
|
- "*"
|
23
23
|
Content-Type:
|
24
|
-
- application/json
|
24
|
+
- application/json; charset=UTF-8
|
25
|
+
X-Cloud-Trace-Context:
|
26
|
+
- 7da0e833b34df34c9cd2b6e4a31eb65c
|
27
|
+
Set-Cookie:
|
28
|
+
- GOOGAPPUID=xCgsIAxDkBiCxl9jMBQ; expires=Tue, 06-Oct-2020 17:33:37 GMT; path=/
|
25
29
|
Date:
|
26
|
-
-
|
30
|
+
- Thu, 17 Aug 2017 21:33:37 GMT
|
27
31
|
Server:
|
28
32
|
- Google Frontend
|
29
|
-
|
30
|
-
-
|
31
|
-
Alt-Svc:
|
32
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
33
|
-
Transfer-Encoding:
|
34
|
-
- chunked
|
33
|
+
Content-Length:
|
34
|
+
- '73'
|
35
35
|
body:
|
36
36
|
encoding: UTF-8
|
37
37
|
string: '{"response":[{"error":{"message":"Message not found."},"success":false}]}'
|
38
38
|
http_version:
|
39
|
-
recorded_at:
|
39
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
40
40
|
recorded_with: VCR 3.0.3
|
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DEVELOPMENT_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DEVELOPMENT_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: '{"data":[{"action":"setUserAttributes","resetAnomalies":true,"userId":123456}]}'
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Content-Type:
|
13
13
|
- application/json
|
14
14
|
Accept-Encoding:
|
@@ -23,20 +23,24 @@ http_interactions:
|
|
23
23
|
Access-Control-Allow-Origin:
|
24
24
|
- "*"
|
25
25
|
Content-Type:
|
26
|
-
- application/json
|
26
|
+
- application/json; charset=UTF-8
|
27
|
+
X-Cloud-Trace-Context:
|
28
|
+
- d7ebf4fc0c3a18f67ee55f88e5d57ebf
|
29
|
+
Set-Cookie:
|
30
|
+
- GOOGAPPUID=xCgsIAxDFASCql9jMBQ; expires=Tue, 06-Oct-2020 17:33:30 GMT; path=/
|
27
31
|
Date:
|
28
|
-
-
|
32
|
+
- Thu, 17 Aug 2017 21:33:30 GMT
|
29
33
|
Server:
|
30
34
|
- Google Frontend
|
35
|
+
Content-Length:
|
36
|
+
- '31'
|
37
|
+
Expires:
|
38
|
+
- Thu, 17 Aug 2017 21:33:30 GMT
|
31
39
|
Cache-Control:
|
32
40
|
- private
|
33
|
-
Alt-Svc:
|
34
|
-
- quic=":443"; ma=2592000; v="35,34,33,32,31,30,29,28,27,26,25"
|
35
|
-
Transfer-Encoding:
|
36
|
-
- chunked
|
37
41
|
body:
|
38
42
|
encoding: UTF-8
|
39
43
|
string: '{"response":[{"success":true}]}'
|
40
44
|
http_version:
|
41
|
-
recorded_at:
|
45
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
42
46
|
recorded_with: VCR 3.0.3
|
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: '{"data":[{"userId":123456,"action":"setUserAttributes","userAttributes":{"first_name":"Mike","last_name":"Jones","gender":"m","email":"still_tippin@test.com","create_date":"2010-01-01","is_tipping":true}}]}'
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.1
|
12
12
|
Content-Type:
|
13
13
|
- application/json
|
14
14
|
Accept-Encoding:
|
@@ -23,23 +23,25 @@ http_interactions:
|
|
23
23
|
Access-Control-Allow-Origin:
|
24
24
|
- "*"
|
25
25
|
Content-Type:
|
26
|
-
- application/json
|
26
|
+
- application/json; charset=UTF-8
|
27
27
|
X-Cloud-Trace-Context:
|
28
|
-
-
|
28
|
+
- 40f001f15ccddf7fe56b8794e359ed7f
|
29
|
+
Set-Cookie:
|
30
|
+
- GOOGAPPUID=xCgoIAxA0IKiX2MwF; expires=Tue, 06-Oct-2020 17:33:29 GMT; path=/
|
29
31
|
Date:
|
30
|
-
-
|
32
|
+
- Thu, 17 Aug 2017 21:33:29 GMT
|
31
33
|
Server:
|
32
34
|
- Google Frontend
|
33
35
|
Content-Length:
|
34
|
-
- '
|
36
|
+
- '120'
|
35
37
|
Expires:
|
36
|
-
-
|
38
|
+
- Thu, 17 Aug 2017 21:33:29 GMT
|
37
39
|
Cache-Control:
|
38
40
|
- private
|
39
41
|
body:
|
40
42
|
encoding: UTF-8
|
41
|
-
string: '{"response":[{"success":true,"warning":{"message":"
|
42
|
-
|
43
|
-
http_version:
|
44
|
-
recorded_at:
|
43
|
+
string: '{"response":[{"success":true,"warning":{"message":"Device clock skew
|
44
|
+
detected (5 days behind). Rewriting timestamp."}}]}'
|
45
|
+
http_version:
|
46
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
45
47
|
recorded_with: VCR 3.0.3
|
@@ -2,14 +2,14 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
|
-
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"
|
9
|
-
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"
|
8
|
+
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"1502510400","params":{"some_timestamp":"2015-05-01
|
9
|
+
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"1502509800"}]}'
|
10
10
|
headers:
|
11
11
|
User-Agent:
|
12
|
-
- Faraday v0.
|
12
|
+
- Faraday v0.12.1
|
13
13
|
Content-Type:
|
14
14
|
- application/json
|
15
15
|
Accept-Encoding:
|
@@ -24,22 +24,26 @@ http_interactions:
|
|
24
24
|
Access-Control-Allow-Origin:
|
25
25
|
- "*"
|
26
26
|
Content-Type:
|
27
|
-
- application/json
|
27
|
+
- application/json; charset=UTF-8
|
28
|
+
X-Cloud-Trace-Context:
|
29
|
+
- 666897794060191c1e9d5e8388b81353
|
30
|
+
Set-Cookie:
|
31
|
+
- GOOGAPPUID=xCgsIAxDcASCql9jMBQ; expires=Tue, 06-Oct-2020 17:33:30 GMT; path=/
|
28
32
|
Date:
|
29
|
-
-
|
33
|
+
- Thu, 17 Aug 2017 21:33:30 GMT
|
30
34
|
Server:
|
31
35
|
- Google Frontend
|
36
|
+
Content-Length:
|
37
|
+
- '260'
|
38
|
+
Expires:
|
39
|
+
- Thu, 17 Aug 2017 21:33:30 GMT
|
32
40
|
Cache-Control:
|
33
41
|
- private
|
34
|
-
Alt-Svc:
|
35
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
36
|
-
Transfer-Encoding:
|
37
|
-
- chunked
|
38
42
|
body:
|
39
43
|
encoding: UTF-8
|
40
|
-
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"
|
41
|
-
|
42
|
-
|
44
|
+
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"Device
|
45
|
+
clock skew detected (5 days behind). Rewriting timestamp."}},{"isOffline":true,"success":true,"warning":{"message":"Device
|
46
|
+
clock skew detected (5 days behind). Rewriting timestamp."}}]}'
|
43
47
|
http_version:
|
44
|
-
recorded_at:
|
48
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
45
49
|
recorded_with: VCR 3.0.3
|
@@ -2,14 +2,14 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
|
-
string: '{"data":[{"userId":123456,"action":"setUserAttributes","userAttributes":{"first_name":"Mike","last_name":"Jones","gender":"m","email":"still_tippin@test.com","create_date":"2010-01-01","is_tipping":true}},{"action":"track","event":"purchase","userId":123456,"time":"
|
9
|
-
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"
|
8
|
+
string: '{"data":[{"userId":123456,"action":"setUserAttributes","userAttributes":{"first_name":"Mike","last_name":"Jones","gender":"m","email":"still_tippin@test.com","create_date":"2010-01-01","is_tipping":true}},{"action":"track","event":"purchase","userId":123456,"time":"1502510400","params":{"some_timestamp":"2015-05-01
|
9
|
+
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"1502509800"}]}'
|
10
10
|
headers:
|
11
11
|
User-Agent:
|
12
|
-
- Faraday v0.
|
12
|
+
- Faraday v0.12.1
|
13
13
|
Content-Type:
|
14
14
|
- application/json
|
15
15
|
Accept-Encoding:
|
@@ -24,25 +24,27 @@ http_interactions:
|
|
24
24
|
Access-Control-Allow-Origin:
|
25
25
|
- "*"
|
26
26
|
Content-Type:
|
27
|
-
- application/json
|
27
|
+
- application/json; charset=UTF-8
|
28
28
|
X-Cloud-Trace-Context:
|
29
|
-
-
|
29
|
+
- c07da72319072cbedf834d35a3a8e5d9
|
30
|
+
Set-Cookie:
|
31
|
+
- GOOGAPPUID=xCgsIAxDTAyCtl9jMBQ; expires=Tue, 06-Oct-2020 17:33:33 GMT; path=/
|
30
32
|
Date:
|
31
|
-
-
|
33
|
+
- Thu, 17 Aug 2017 21:33:33 GMT
|
32
34
|
Server:
|
33
35
|
- Google Frontend
|
34
36
|
Content-Length:
|
35
|
-
- '
|
37
|
+
- '366'
|
36
38
|
Expires:
|
37
|
-
-
|
39
|
+
- Thu, 17 Aug 2017 21:33:33 GMT
|
38
40
|
Cache-Control:
|
39
41
|
- private
|
40
42
|
body:
|
41
43
|
encoding: UTF-8
|
42
|
-
string: '{"response":[{"success":true,"warning":{"message":"
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
http_version:
|
47
|
-
recorded_at:
|
44
|
+
string: '{"response":[{"success":true,"warning":{"message":"Device clock skew
|
45
|
+
detected (5 days behind). Rewriting timestamp."}},{"isOffline":true,"success":true,"warning":{"message":"Device
|
46
|
+
clock skew detected (5 days behind). Rewriting timestamp."}},{"isOffline":true,"success":true,"warning":{"message":"Device
|
47
|
+
clock skew detected (5 days behind). Rewriting timestamp."}}]}'
|
48
|
+
http_version:
|
49
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
48
50
|
recorded_with: VCR 3.0.3
|
@@ -2,14 +2,14 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
|
-
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"
|
9
|
-
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"
|
8
|
+
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"1502510400","params":{"some_timestamp":"2015-05-01
|
9
|
+
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"1502509800"}]}'
|
10
10
|
headers:
|
11
11
|
User-Agent:
|
12
|
-
- Faraday v0.
|
12
|
+
- Faraday v0.12.1
|
13
13
|
Content-Type:
|
14
14
|
- application/json
|
15
15
|
Accept-Encoding:
|
@@ -24,33 +24,37 @@ http_interactions:
|
|
24
24
|
Access-Control-Allow-Origin:
|
25
25
|
- "*"
|
26
26
|
Content-Type:
|
27
|
-
- application/json
|
27
|
+
- application/json; charset=UTF-8
|
28
|
+
X-Cloud-Trace-Context:
|
29
|
+
- a90e4c3f6da128e404bdf0b1affc16e0
|
30
|
+
Set-Cookie:
|
31
|
+
- GOOGAPPUID=xCgsIAxDrBCCrl9jMBQ; expires=Tue, 06-Oct-2020 17:33:31 GMT; path=/
|
28
32
|
Date:
|
29
|
-
-
|
33
|
+
- Thu, 17 Aug 2017 21:33:31 GMT
|
30
34
|
Server:
|
31
35
|
- Google Frontend
|
36
|
+
Content-Length:
|
37
|
+
- '260'
|
38
|
+
Expires:
|
39
|
+
- Thu, 17 Aug 2017 21:33:31 GMT
|
32
40
|
Cache-Control:
|
33
41
|
- private
|
34
|
-
Alt-Svc:
|
35
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
36
|
-
Transfer-Encoding:
|
37
|
-
- chunked
|
38
42
|
body:
|
39
43
|
encoding: UTF-8
|
40
|
-
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"
|
41
|
-
|
42
|
-
|
44
|
+
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"Device
|
45
|
+
clock skew detected (5 days behind). Rewriting timestamp."}},{"isOffline":true,"success":true,"warning":{"message":"Device
|
46
|
+
clock skew detected (5 days behind). Rewriting timestamp."}}]}'
|
43
47
|
http_version:
|
44
|
-
recorded_at:
|
48
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
45
49
|
- request:
|
46
50
|
method: post
|
47
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DEVELOPMENT_KEY>&devMode=false&time=
|
51
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_DEVELOPMENT_KEY>&devMode=false&time=1502510400
|
48
52
|
body:
|
49
53
|
encoding: UTF-8
|
50
54
|
string: '{"data":[{"action":"setUserAttributes","resetAnomalies":true,"userId":123456},{"action":"setUserAttributes","resetAnomalies":true,"userId":54321}]}'
|
51
55
|
headers:
|
52
56
|
User-Agent:
|
53
|
-
- Faraday v0.
|
57
|
+
- Faraday v0.12.1
|
54
58
|
Content-Type:
|
55
59
|
- application/json
|
56
60
|
Accept-Encoding:
|
@@ -65,20 +69,24 @@ http_interactions:
|
|
65
69
|
Access-Control-Allow-Origin:
|
66
70
|
- "*"
|
67
71
|
Content-Type:
|
68
|
-
- application/json
|
72
|
+
- application/json; charset=UTF-8
|
73
|
+
X-Cloud-Trace-Context:
|
74
|
+
- 8890d27564945450410dd64dd6ac16ce
|
75
|
+
Set-Cookie:
|
76
|
+
- GOOGAPPUID=xCgsIAxDOByCsl9jMBQ; expires=Tue, 06-Oct-2020 17:33:32 GMT; path=/
|
69
77
|
Date:
|
70
|
-
-
|
78
|
+
- Thu, 17 Aug 2017 21:33:32 GMT
|
71
79
|
Server:
|
72
80
|
- Google Frontend
|
81
|
+
Content-Length:
|
82
|
+
- '48'
|
83
|
+
Expires:
|
84
|
+
- Thu, 17 Aug 2017 21:33:32 GMT
|
73
85
|
Cache-Control:
|
74
86
|
- private
|
75
|
-
Alt-Svc:
|
76
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
77
|
-
Transfer-Encoding:
|
78
|
-
- chunked
|
79
87
|
body:
|
80
88
|
encoding: UTF-8
|
81
89
|
string: '{"response":[{"success":true},{"success":true}]}'
|
82
90
|
http_version:
|
83
|
-
recorded_at:
|
91
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
84
92
|
recorded_with: VCR 3.0.3
|
@@ -2,14 +2,14 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=
|
5
|
+
uri: https://www.leanplum.com/api?action=multi&apiVersion=1.0.6&appId=<LEANPLUM_APP_ID>&clientKey=<LEANPLUM_PRODUCTION_KEY>&devMode=false&time=1502510400
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
|
-
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"
|
9
|
-
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"
|
8
|
+
string: '{"data":[{"action":"track","event":"purchase","userId":123456,"time":"1502510400","allowOffline":true,"params":{"some_timestamp":"2015-05-01
|
9
|
+
01:02:03"}},{"action":"track","event":"purchase_page_view","userId":54321,"time":"1502509800","allowOffline":true}]}'
|
10
10
|
headers:
|
11
11
|
User-Agent:
|
12
|
-
- Faraday v0.
|
12
|
+
- Faraday v0.12.1
|
13
13
|
Content-Type:
|
14
14
|
- application/json
|
15
15
|
Accept-Encoding:
|
@@ -24,22 +24,26 @@ http_interactions:
|
|
24
24
|
Access-Control-Allow-Origin:
|
25
25
|
- "*"
|
26
26
|
Content-Type:
|
27
|
-
- application/json
|
27
|
+
- application/json; charset=UTF-8
|
28
|
+
X-Cloud-Trace-Context:
|
29
|
+
- da0211f2f027a6d6521dbbc188cc4764
|
30
|
+
Set-Cookie:
|
31
|
+
- GOOGAPPUID=xCgoIAxAGIKuX2MwF; expires=Tue, 06-Oct-2020 17:33:31 GMT; path=/
|
28
32
|
Date:
|
29
|
-
-
|
33
|
+
- Thu, 17 Aug 2017 21:33:31 GMT
|
30
34
|
Server:
|
31
35
|
- Google Frontend
|
36
|
+
Content-Length:
|
37
|
+
- '260'
|
38
|
+
Expires:
|
39
|
+
- Thu, 17 Aug 2017 21:33:31 GMT
|
32
40
|
Cache-Control:
|
33
41
|
- private
|
34
|
-
Alt-Svc:
|
35
|
-
- quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
|
36
|
-
Transfer-Encoding:
|
37
|
-
- chunked
|
38
42
|
body:
|
39
43
|
encoding: UTF-8
|
40
|
-
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"
|
41
|
-
|
42
|
-
|
44
|
+
string: '{"response":[{"isOffline":true,"success":true,"warning":{"message":"Device
|
45
|
+
clock skew detected (5 days behind). Rewriting timestamp."}},{"isOffline":true,"success":true,"warning":{"message":"Device
|
46
|
+
clock skew detected (5 days behind). Rewriting timestamp."}}]}'
|
43
47
|
http_version:
|
44
|
-
recorded_at:
|
48
|
+
recorded_at: Sat, 12 Aug 2017 04:00:00 GMT
|
45
49
|
recorded_with: VCR 3.0.3
|
data/spec/http_spec.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe LeanplumApi::Connection
|
3
|
+
describe LeanplumApi::Connection do
|
4
|
+
let(:http) { described_class.new(LeanplumApi.configuration.production_key) }
|
5
|
+
def argument_string(dev_mode)
|
6
|
+
"appId=#{LeanplumApi.configuration.app_id}&clientKey=#{LeanplumApi.configuration.production_key}&apiVersion=1.0.6&devMode=#{dev_mode}&action=multi&time=#{Time.now.utc.strftime('%s')}"
|
7
|
+
end
|
8
|
+
|
4
9
|
context 'regular mode' do
|
5
10
|
it 'should build the right multi url' do
|
6
|
-
http
|
7
|
-
expect(http.send(:authed_multi_param_string)).to eq("appId=#{LeanplumApi.configuration.app_id}&clientKey=#{LeanplumApi.configuration.production_key}&apiVersion=1.0.6&devMode=false&action=multi&time=#{Time.now.utc.strftime('%s')}")
|
11
|
+
expect(http.send(:authed_multi_param_string)).to eq(argument_string(false))
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
@@ -16,8 +20,7 @@ describe LeanplumApi::Connection::Production do
|
|
16
20
|
end
|
17
21
|
|
18
22
|
it 'should build the right developer mode url' do
|
19
|
-
http
|
20
|
-
expect(http.send(:authed_multi_param_string)).to eq("appId=#{LeanplumApi.configuration.app_id}&clientKey=#{LeanplumApi.configuration.production_key}&apiVersion=1.0.6&devMode=true&action=multi&time=#{Time.now.utc.strftime('%s')}")
|
23
|
+
expect(http.send(:authed_multi_param_string)).to eq(argument_string(true))
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leanplum_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lumos Labs, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -147,10 +147,7 @@ files:
|
|
147
147
|
- lib/leanplum_api.rb
|
148
148
|
- lib/leanplum_api/api.rb
|
149
149
|
- lib/leanplum_api/configuration.rb
|
150
|
-
- lib/leanplum_api/
|
151
|
-
- lib/leanplum_api/connections/data_export.rb
|
152
|
-
- lib/leanplum_api/connections/development.rb
|
153
|
-
- lib/leanplum_api/connections/production.rb
|
150
|
+
- lib/leanplum_api/connection.rb
|
154
151
|
- lib/leanplum_api/faraday_middleware/response_validation.rb
|
155
152
|
- lib/leanplum_api/logger.rb
|
156
153
|
- lib/leanplum_api/version.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'leanplum_api/connections/production'
|
2
|
-
|
3
|
-
module LeanplumApi::Connection
|
4
|
-
class ContentReadOnly < Production
|
5
|
-
def initialize(options = {})
|
6
|
-
raise 'Content read only key not configured!' unless LeanplumApi.configuration.content_read_only_key
|
7
|
-
super
|
8
|
-
end
|
9
|
-
|
10
|
-
# Data export API requests need to use the Data Export key
|
11
|
-
def authentication_params
|
12
|
-
super.merge(clientKey: LeanplumApi.configuration.content_read_only_key)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'leanplum_api/connections/production'
|
2
|
-
|
3
|
-
module LeanplumApi::Connection
|
4
|
-
class DataExport < Production
|
5
|
-
def initialize(options = {})
|
6
|
-
raise 'Data export key not configured' unless LeanplumApi.configuration.data_export_key
|
7
|
-
super
|
8
|
-
end
|
9
|
-
|
10
|
-
# Data export API requests need to use the Data Export key
|
11
|
-
def authentication_params
|
12
|
-
super.merge(clientKey: LeanplumApi.configuration.data_export_key)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'leanplum_api/connections/production'
|
2
|
-
|
3
|
-
module LeanplumApi::Connection
|
4
|
-
class Development < Production
|
5
|
-
def initialize(options = {})
|
6
|
-
raise 'Development key not configured!' unless LeanplumApi.configuration.development_key
|
7
|
-
super
|
8
|
-
end
|
9
|
-
|
10
|
-
def authentication_params
|
11
|
-
super.merge(clientKey: LeanplumApi.configuration.development_key)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|