urbanairship 5.6.0 → 6.0.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 +4 -4
- data/CHANGELOG +30 -0
- data/README.rst +1 -0
- data/docs/ab_tests.rst +162 -0
- data/docs/attributes.rst +52 -0
- data/docs/automations.rst +212 -0
- data/docs/index.rst +3 -0
- data/docs/push.rst +24 -0
- data/docs/sms.rst +19 -0
- data/docs/static_lists.rst +2 -2
- data/lib/urbanairship.rb +12 -0
- data/lib/urbanairship/ab_tests/ab_test.rb +88 -0
- data/lib/urbanairship/ab_tests/experiment.rb +45 -0
- data/lib/urbanairship/ab_tests/variant.rb +34 -0
- data/lib/urbanairship/automations/automation.rb +105 -0
- data/lib/urbanairship/automations/pipeline.rb +52 -0
- data/lib/urbanairship/client.rb +22 -9
- data/lib/urbanairship/common.rb +63 -16
- data/lib/urbanairship/configuration.rb +2 -1
- data/lib/urbanairship/custom_events/custom_event.rb +60 -0
- data/lib/urbanairship/custom_events/payload.rb +89 -0
- data/lib/urbanairship/devices/attribute.rb +54 -0
- data/lib/urbanairship/devices/channel_tags.rb +1 -1
- data/lib/urbanairship/devices/channel_uninstall.rb +10 -10
- data/lib/urbanairship/devices/create_and_send.rb +4 -4
- data/lib/urbanairship/devices/devicelist.rb +28 -7
- data/lib/urbanairship/devices/email.rb +5 -5
- data/lib/urbanairship/devices/email_notification.rb +11 -4
- data/lib/urbanairship/devices/named_user.rb +6 -6
- data/lib/urbanairship/devices/open_channel.rb +22 -23
- data/lib/urbanairship/devices/segment.rb +5 -5
- data/lib/urbanairship/devices/sms.rb +40 -9
- data/lib/urbanairship/devices/static_lists.rb +12 -12
- data/lib/urbanairship/push/location.rb +7 -7
- data/lib/urbanairship/push/push.rb +23 -13
- data/lib/urbanairship/push/schedule.rb +9 -0
- data/lib/urbanairship/reports/response_statistics.rb +9 -9
- data/lib/urbanairship/version.rb +1 -1
- metadata +16 -5
@@ -13,16 +13,16 @@ module Urbanairship
|
|
13
13
|
@client = client
|
14
14
|
end
|
15
15
|
|
16
|
-
def create(description: nil,
|
16
|
+
def create(description: nil, extra: nil)
|
17
17
|
fail ArgumentError, 'Name must be set' if name.nil?
|
18
18
|
payload = {'name': name}
|
19
19
|
payload['description'] = description unless description.nil?
|
20
|
-
payload['
|
20
|
+
payload['extra'] = extra unless extra.nil?
|
21
21
|
|
22
22
|
response = @client.send_request(
|
23
23
|
method: 'POST',
|
24
24
|
body: JSON.dump(payload),
|
25
|
-
url:
|
25
|
+
url: lists_url,
|
26
26
|
content_type: 'application/json'
|
27
27
|
)
|
28
28
|
logger.info("Created static list for #{@name}")
|
@@ -35,7 +35,7 @@ module Urbanairship
|
|
35
35
|
response = @client.send_request(
|
36
36
|
method: 'PUT',
|
37
37
|
body: csv_file,
|
38
|
-
url:
|
38
|
+
url: lists_url(@name + '/csv/'),
|
39
39
|
content_type: 'text/csv',
|
40
40
|
encoding: gzip
|
41
41
|
)
|
@@ -43,7 +43,7 @@ module Urbanairship
|
|
43
43
|
response = @client.send_request(
|
44
44
|
method: 'PUT',
|
45
45
|
body: csv_file,
|
46
|
-
url:
|
46
|
+
url: lists_url(@name + '/csv/'),
|
47
47
|
content_type: 'text/csv'
|
48
48
|
)
|
49
49
|
end
|
@@ -51,17 +51,17 @@ module Urbanairship
|
|
51
51
|
response
|
52
52
|
end
|
53
53
|
|
54
|
-
def update(description: nil,
|
54
|
+
def update(description: nil, extra: nil)
|
55
55
|
fail ArgumentError, 'Name must be set' if name.nil?
|
56
56
|
fail ArgumentError,
|
57
|
-
'Either description or extras must be set to a value' if description.nil? and
|
57
|
+
'Either description or extras must be set to a value' if description.nil? and extra.nil?
|
58
58
|
payload = {}
|
59
59
|
payload['description'] = description unless description.nil?
|
60
|
-
payload['
|
60
|
+
payload['extra'] = extra unless extra.nil?
|
61
61
|
response = @client.send_request(
|
62
62
|
method: 'PUT',
|
63
63
|
body: JSON.dump(payload),
|
64
|
-
url:
|
64
|
+
url: lists_url(@name),
|
65
65
|
content_type: 'application/json'
|
66
66
|
)
|
67
67
|
logger.info("Updating the metadata for list #{@name}")
|
@@ -72,7 +72,7 @@ module Urbanairship
|
|
72
72
|
fail ArgumentError, 'Name must be set' if name.nil?
|
73
73
|
response = @client.send_request(
|
74
74
|
method: 'GET',
|
75
|
-
url:
|
75
|
+
url: lists_url(@name)
|
76
76
|
)
|
77
77
|
logger.info("Retrieving info for list #{@name}")
|
78
78
|
response
|
@@ -82,7 +82,7 @@ module Urbanairship
|
|
82
82
|
fail ArgumentError, 'Name must be set' if name.nil?
|
83
83
|
response = @client.send_request(
|
84
84
|
method: 'DELETE',
|
85
|
-
url:
|
85
|
+
url: lists_url(@name)
|
86
86
|
)
|
87
87
|
logger.info("Deleted list #{@name}")
|
88
88
|
response
|
@@ -92,7 +92,7 @@ module Urbanairship
|
|
92
92
|
class StaticLists < Urbanairship::Common::PageIterator
|
93
93
|
def initialize(client: required('client'))
|
94
94
|
super(client: client)
|
95
|
-
@next_page =
|
95
|
+
@next_page = lists_url
|
96
96
|
@data_attribute = 'lists'
|
97
97
|
end
|
98
98
|
end
|
@@ -14,7 +14,7 @@ module Urbanairship
|
|
14
14
|
def name_lookup(name: required('name'), type: nil)
|
15
15
|
fail ArgumentError, 'name needs to be a string' unless name.is_a? String
|
16
16
|
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
17
|
-
url =
|
17
|
+
url = location_url('?q=' + name)
|
18
18
|
url += '&type=' + type unless type.nil?
|
19
19
|
resp = @client.send_request(
|
20
20
|
method: 'GET',
|
@@ -28,7 +28,7 @@ module Urbanairship
|
|
28
28
|
fail ArgumentError,
|
29
29
|
'latitude and longitude need to be numbers' unless latitude.is_a? Numeric and longitude.is_a? Numeric
|
30
30
|
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
31
|
-
url =
|
31
|
+
url = location_url(latitude.to_s + ',' + longitude.to_s)
|
32
32
|
url += '?type=' + type unless type.nil?
|
33
33
|
resp = @client.send_request(
|
34
34
|
method: 'GET',
|
@@ -45,7 +45,7 @@ module Urbanairship
|
|
45
45
|
'lat1, long1, lat2, and long2 need to be numbers' unless lat1.is_a? Numeric and long2.is_a? Numeric\
|
46
46
|
and lat2.is_a? Numeric and long2.is_a? Numeric
|
47
47
|
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
48
|
-
url =
|
48
|
+
url = location_url(lat1.to_s + ',' + long1.to_s + ',' + lat2.to_s + ',' + long2.to_s)
|
49
49
|
url += '?type=' + type unless type.nil?
|
50
50
|
resp = @client.send_request(
|
51
51
|
method: 'GET',
|
@@ -58,7 +58,7 @@ module Urbanairship
|
|
58
58
|
|
59
59
|
def alias_lookup(from_alias: required('from_alias'))
|
60
60
|
fail ArgumentError, 'from_alias needs to be a string or an array of strings' unless from_alias.is_a? String or from_alias.is_a? Array
|
61
|
-
url =
|
61
|
+
url = location_url('from-alias?')
|
62
62
|
if from_alias.is_a? Array
|
63
63
|
from_alias.each do |a|
|
64
64
|
fail ArgumentError, 'from_alias needs to be a string or an array of strings' unless a.is_a? String
|
@@ -81,7 +81,7 @@ module Urbanairship
|
|
81
81
|
fail ArgumentError, 'polygon_id needs to be a string' unless polygon_id.is_a? String
|
82
82
|
fail ArgumentError, 'zoom needs to be an integer' unless zoom.is_a? Integer
|
83
83
|
|
84
|
-
url =
|
84
|
+
url = location_url(polygon_id + '?zoom=' + zoom.to_s)
|
85
85
|
resp = @client.send_request(
|
86
86
|
method: 'GET',
|
87
87
|
url: url
|
@@ -93,11 +93,11 @@ module Urbanairship
|
|
93
93
|
def date_ranges
|
94
94
|
resp = @client.send_request(
|
95
95
|
method: 'GET',
|
96
|
-
url:
|
96
|
+
url: segments_url('dates/')
|
97
97
|
)
|
98
98
|
logger.info('Retrieved location date ranges')
|
99
99
|
resp
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
103
|
-
end
|
103
|
+
end
|
@@ -8,9 +8,17 @@ module Urbanairship
|
|
8
8
|
|
9
9
|
# A Push Notification.
|
10
10
|
class Push
|
11
|
-
attr_writer :client
|
12
|
-
|
13
|
-
|
11
|
+
attr_writer :client
|
12
|
+
|
13
|
+
attr_accessor :device_types,
|
14
|
+
:audience,
|
15
|
+
:notification,
|
16
|
+
:options,
|
17
|
+
:message,
|
18
|
+
:in_app,
|
19
|
+
:campaigns,
|
20
|
+
:localizations
|
21
|
+
|
14
22
|
include Urbanairship::Common
|
15
23
|
include Urbanairship::Loggable
|
16
24
|
|
@@ -23,12 +31,14 @@ module Urbanairship
|
|
23
31
|
|
24
32
|
def payload
|
25
33
|
compact_helper({
|
26
|
-
audience:
|
27
|
-
notification:
|
28
|
-
options:
|
29
|
-
device_types:
|
30
|
-
message:
|
31
|
-
in_app:
|
34
|
+
audience: audience,
|
35
|
+
notification: notification,
|
36
|
+
options: options,
|
37
|
+
device_types: device_types,
|
38
|
+
message: message,
|
39
|
+
in_app: in_app,
|
40
|
+
campaigns: campaigns,
|
41
|
+
localizations: localizations
|
32
42
|
})
|
33
43
|
end
|
34
44
|
|
@@ -42,7 +52,7 @@ module Urbanairship
|
|
42
52
|
response = @client.send_request(
|
43
53
|
method: 'POST',
|
44
54
|
body: JSON.dump(payload),
|
45
|
-
url:
|
55
|
+
url: push_url,
|
46
56
|
content_type: 'application/json'
|
47
57
|
)
|
48
58
|
pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
|
@@ -83,7 +93,7 @@ module Urbanairship
|
|
83
93
|
response = @client.send_request(
|
84
94
|
method: 'POST',
|
85
95
|
body: JSON.dump(payload),
|
86
|
-
url:
|
96
|
+
url: schedules_url,
|
87
97
|
content_type: 'application/json'
|
88
98
|
)
|
89
99
|
pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
|
@@ -160,7 +170,7 @@ module Urbanairship
|
|
160
170
|
'schedule_id must be a string' unless schedule_id.is_a? String
|
161
171
|
resp = @client.send_request(
|
162
172
|
method: 'GET',
|
163
|
-
url:
|
173
|
+
url: schedules_url(schedule_id)
|
164
174
|
)
|
165
175
|
logger.info("Retrieved info for schedule_id #{schedule_id}")
|
166
176
|
resp
|
@@ -171,7 +181,7 @@ module Urbanairship
|
|
171
181
|
class ScheduledPushList < Urbanairship::Common::PageIterator
|
172
182
|
def initialize(client: required('client'))
|
173
183
|
super(client: client)
|
174
|
-
@next_page =
|
184
|
+
@next_page = schedules_url
|
175
185
|
@data_attribute = 'schedules'
|
176
186
|
end
|
177
187
|
end
|
@@ -14,6 +14,15 @@ module Urbanairship
|
|
14
14
|
payload(:local_scheduled_time, datetime)
|
15
15
|
end
|
16
16
|
|
17
|
+
# Uses predictive analysis to send push at optimal time
|
18
|
+
def optimal_scheduled_time(date)
|
19
|
+
{
|
20
|
+
'best_time': {
|
21
|
+
'send_date': date
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
17
26
|
private
|
18
27
|
|
19
28
|
def payload(name, time)
|
@@ -35,7 +35,7 @@ module Urbanairship
|
|
35
35
|
fail ArgumentError,
|
36
36
|
'push_id cannot be nil' if push_id.nil?
|
37
37
|
|
38
|
-
url =
|
38
|
+
url = reports_url('responses/' + push_id)
|
39
39
|
response = @client.send_request(method: 'GET', url: url)
|
40
40
|
logger.info("Retrieved info on push_id: #{push_id}")
|
41
41
|
response
|
@@ -60,7 +60,7 @@ module Urbanairship
|
|
60
60
|
fail ArgumentError,
|
61
61
|
'start_date and end_date must be valid date strings'
|
62
62
|
end
|
63
|
-
url =
|
63
|
+
url = reports_url('responses/list?start=' + start_parsed.iso8601 + '&end=' + end_parsed.iso8601)
|
64
64
|
url += '&limit' + limit.to_s unless limit.nil?
|
65
65
|
url += '&push_id_start&' + push_id_start unless push_id_start.nil?
|
66
66
|
@next_page = url
|
@@ -87,7 +87,7 @@ module Urbanairship
|
|
87
87
|
end
|
88
88
|
response = @client.send_request(
|
89
89
|
method: 'GET',
|
90
|
-
url:
|
90
|
+
url: reports_url('devices/?date=' + date_parsed.iso8601)
|
91
91
|
)
|
92
92
|
logger.info("Retrieved device report for date #{date}")
|
93
93
|
response
|
@@ -99,7 +99,7 @@ module Urbanairship
|
|
99
99
|
end_date: required('end_date'), precision: required('precision'))
|
100
100
|
super(client: client)
|
101
101
|
url = Helper.new.get_url(start_date, end_date, precision)
|
102
|
-
@next_page =
|
102
|
+
@next_page = reports_url('optins/' + url)
|
103
103
|
@data_attribute = 'optins'
|
104
104
|
end
|
105
105
|
end
|
@@ -109,7 +109,7 @@ module Urbanairship
|
|
109
109
|
end_date: required('end_date'), precision: required('precision'))
|
110
110
|
super(client: client)
|
111
111
|
url = Helper.new.get_url(start_date, end_date, precision)
|
112
|
-
@next_page =
|
112
|
+
@next_page = reports_url('optouts/' + url)
|
113
113
|
@data_attribute = 'optouts'
|
114
114
|
end
|
115
115
|
end
|
@@ -119,7 +119,7 @@ module Urbanairship
|
|
119
119
|
end_date: required('end_date'), precision: required('precision'))
|
120
120
|
super(client: client)
|
121
121
|
url = Helper.new.get_url(start_date, end_date, precision)
|
122
|
-
@next_page =
|
122
|
+
@next_page = reports_url('sends/' + url)
|
123
123
|
@data_attribute = 'sends'
|
124
124
|
end
|
125
125
|
end
|
@@ -129,7 +129,7 @@ module Urbanairship
|
|
129
129
|
end_date: required('end_date'), precision: required('precision'))
|
130
130
|
super(client: client)
|
131
131
|
url = Helper.new.get_url(start_date, end_date, precision)
|
132
|
-
@next_page =
|
132
|
+
@next_page = reports_url('responses/' + url)
|
133
133
|
@data_attribute = 'responses'
|
134
134
|
end
|
135
135
|
end
|
@@ -139,7 +139,7 @@ module Urbanairship
|
|
139
139
|
end_date: required('end_date'), precision: required('precision'))
|
140
140
|
super(client: client)
|
141
141
|
url = Helper.new.get_url(start_date, end_date, precision)
|
142
|
-
@next_page =
|
142
|
+
@next_page = reports_url('opens/' + url)
|
143
143
|
@data_attribute = 'opens'
|
144
144
|
end
|
145
145
|
end
|
@@ -149,7 +149,7 @@ module Urbanairship
|
|
149
149
|
end_date: required('end_date'), precision: required('precision'))
|
150
150
|
super(client: client)
|
151
151
|
url = Helper.new.get_url(start_date, end_date, precision)
|
152
|
-
@next_page =
|
152
|
+
@next_page = reports_url('timeinapp/' + url)
|
153
153
|
@data_attribute = 'timeinapp'
|
154
154
|
end
|
155
155
|
end
|
data/lib/urbanairship/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urbanairship
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airship
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -138,6 +138,9 @@ files:
|
|
138
138
|
- bin/console
|
139
139
|
- bin/setup
|
140
140
|
- docs/Makefile
|
141
|
+
- docs/ab_tests.rst
|
142
|
+
- docs/attributes.rst
|
143
|
+
- docs/automations.rst
|
141
144
|
- docs/channel_uninstall.rst
|
142
145
|
- docs/conf.py
|
143
146
|
- docs/create_and_send.rst
|
@@ -157,9 +160,17 @@ files:
|
|
157
160
|
- docs/tags.rst
|
158
161
|
- example/pusher.rb
|
159
162
|
- lib/urbanairship.rb
|
163
|
+
- lib/urbanairship/ab_tests/ab_test.rb
|
164
|
+
- lib/urbanairship/ab_tests/experiment.rb
|
165
|
+
- lib/urbanairship/ab_tests/variant.rb
|
166
|
+
- lib/urbanairship/automations/automation.rb
|
167
|
+
- lib/urbanairship/automations/pipeline.rb
|
160
168
|
- lib/urbanairship/client.rb
|
161
169
|
- lib/urbanairship/common.rb
|
162
170
|
- lib/urbanairship/configuration.rb
|
171
|
+
- lib/urbanairship/custom_events/custom_event.rb
|
172
|
+
- lib/urbanairship/custom_events/payload.rb
|
173
|
+
- lib/urbanairship/devices/attribute.rb
|
163
174
|
- lib/urbanairship/devices/channel_tags.rb
|
164
175
|
- lib/urbanairship/devices/channel_uninstall.rb
|
165
176
|
- lib/urbanairship/devices/create_and_send.rb
|
@@ -188,7 +199,7 @@ licenses:
|
|
188
199
|
- Apache-2.0
|
189
200
|
metadata:
|
190
201
|
allowed_push_host: https://rubygems.org
|
191
|
-
post_install_message:
|
202
|
+
post_install_message:
|
192
203
|
rdoc_options: []
|
193
204
|
require_paths:
|
194
205
|
- lib
|
@@ -204,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
215
|
version: '0'
|
205
216
|
requirements: []
|
206
217
|
rubygems_version: 3.0.1
|
207
|
-
signing_key:
|
218
|
+
signing_key:
|
208
219
|
specification_version: 4
|
209
220
|
summary: Ruby Gem for using the Airship API
|
210
221
|
test_files: []
|