urbanairship 5.6.1 → 5.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65cc3a3fd4338610d0689454dad88addc5529cd5e8011e839360be5ab49146f3
4
- data.tar.gz: af48efa2117b79b9bac9f9c634cff5ce43e572a6eaf46d4d1e940f8678adcaa7
3
+ metadata.gz: 6d4dc107770392a93c88c327e14122fc56cb6ec8fbd17f58984df43d2661d630
4
+ data.tar.gz: 75c8ff88b54de9ad97fa3dbf503333bc49cd29c0fcfea2e937fe7cce5a4f3c92
5
5
  SHA512:
6
- metadata.gz: 295d9fc6469ce209e9c2b3a108641089e65993a9e6a54673702d8f7fc97c0204a7ee2b22c2e5fed80985c262ee4690586992d0f57d7ccb8fce98fcaa548b0f53
7
- data.tar.gz: f91849ee2e0b5f0e8cb4e5897058937b71c140bb25de8c283c450e16971dffc3fa996a179804eed2e6bf765817f6efbe5c4f85294ac8de2741bae71f88b2349b
6
+ metadata.gz: e6203f67400dd7581568c1307c688ae842c32c1b67532ead780a62cd3ca9aa9256511a5d6a7f0b9e68f58acc5a3e56bfc4172f5ec4bf24c622285f94f04d4bd3
7
+ data.tar.gz: 4c6660cdd60ed9628151f19a448ecbbdde3b43a0bff521c95ef1903874f17610c3194c467623bd37a67f95f9fea9139e1b60acaf818aa2899f0ba7f6c022591d
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ --------------------
2
+ 5.7.0
3
+ --------------------
4
+ - Adds Automation support
5
+ - Adds A/B test support
6
+
1
7
  --------------------
2
8
  5.6.1
3
9
  --------------------
@@ -0,0 +1,162 @@
1
+ A/B Tests
2
+ =========
3
+
4
+ In this client, we format A/B tests with three nesting components. The first is the Variant,
5
+ the difference between one kind of push and another. The Variant is a part of the Experiment
6
+ object, with many variants in an array. Lastly. AbTest handles what Experiments along with their Variants
7
+ get sent to the various API endpoints. Basic pushes can be added straight to the Variant object
8
+ on the push instance variable, or a Push object can be created, and the payload applied to the
9
+ Variant object. For more information on this please visit: https://docs.airship.com/api/ua/#tag/a/b-tests
10
+
11
+ List Existing A/B Tests
12
+ -----------------------
13
+
14
+ This endpoint will return the existing A/B tests on a project.
15
+
16
+ .. code-block:: ruby
17
+
18
+ require 'urbanairship'
19
+ UA = Urbanairship
20
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
21
+ ab_test = UA::AbTest.new(client: airship)
22
+ ab_test.limit = 5
23
+ ab_test.list_ab_test
24
+
25
+ .. note::
26
+
27
+ Should return a 200 HTTP status code as well as a list of existing A/B tests with a
28
+ default offset and a limit of 5. The limit and offset are optional here.
29
+
30
+ Create A/B Test
31
+ ----------------
32
+
33
+ As described above, the creation of an A/B Test consists of creating a few objects, grabbing
34
+ pertinent data out of them, and creating an A/B Test that is as complicated or as simple as you
35
+ like. In some cases, it might be easier to assign the payload values yourself, but as pushes,
36
+ and the tests themselves get more complicated, it is easier to let the objects do the work for you.
37
+
38
+
39
+ .. code-block:: ruby
40
+
41
+ require 'urbanairship'
42
+ UA = Urbanairship
43
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
44
+ variant_one = UA::Variant.new(client: airship)
45
+ variant_one.push = {
46
+ "notification": {
47
+ "alert": "I love cereal"
48
+ }
49
+ }
50
+ variant_two = UA::Variant.new(client: airship)
51
+ variant_two.push = {
52
+ "notification": {
53
+ "alert": "I prefer oatmeal"
54
+ }
55
+ }
56
+ experiment = UA::Experiment.new(client: airship)
57
+ experiment.name = 'Neat experiment'
58
+ experiment.description = 'See how neat we can get'
59
+ experiment.audience = 'all'
60
+ experiment.device_types = 'all'
61
+ experiment.variants << variant_one.payload
62
+ experiment.variants << variant_two.payload
63
+ ab_test = UA::AbTest.new(client: airship)
64
+ ab_test.experiment_object = experiment.payload
65
+ ab_test.create_ab_test
66
+
67
+ .. note::
68
+
69
+ Should return a 201 HTTP status code as well as other information detailing specific
70
+ information (such as push_id) for the newly created A/B Test.
71
+
72
+ List Scheduled A/B Tests
73
+ ------------------------
74
+
75
+ This will list all the scheduled A/B Tests for a project.
76
+
77
+ .. code-block:: ruby
78
+
79
+ require 'urbanairship'
80
+ UA = Urbanairship
81
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
82
+ ab_test = UA::AbTest.new(client: airship)
83
+ ab_test.list_scheduled_ab_test
84
+
85
+ .. note::
86
+
87
+ Should return a 200 HTTP status code. Here, you can also apply limit and offset by assigning
88
+ values to the instance variables on the AbTest object.
89
+
90
+ Delete A/B Test
91
+ ----------------
92
+
93
+ This will delete an A/B Test with a given experiment ID.
94
+
95
+ .. code-block:: ruby
96
+
97
+ require 'urbanairship'
98
+ UA = Urbanairship
99
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
100
+ ab_test = UA::AbTest.new(client: airship)
101
+ ab_test.experiment_id = '<experiment_id>'
102
+ ab_test.delete_ab_test
103
+
104
+ .. note::
105
+
106
+ Response should be a 200 HTTP Response
107
+
108
+ Validate A/B Test
109
+ ------------------
110
+
111
+ Very similar to the create A/B Test endpoint, this will validate an A/B Test to
112
+ see if it is formatted properly.
113
+
114
+ .. code-block:: ruby
115
+
116
+ require 'urbanairship'
117
+ UA = Urbanairship
118
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
119
+ variant_one = UA::Variant.new(client: airship)
120
+ variant_one.push = {
121
+ "notification": {
122
+ "alert": "I love cereal"
123
+ }
124
+ }
125
+ variant_two = UA::Variant.new(client: airship)
126
+ variant_two.push = {
127
+ "notification": {
128
+ "alert": "I prefer oatmeal"
129
+ }
130
+ }
131
+ experiment = UA::Experiment.new(client: airship)
132
+ experiment.name = 'Neat experiment'
133
+ experiment.description = 'See how neat we can get'
134
+ experiment.audience = 'all'
135
+ experiment.device_types = 'all'
136
+ experiment.variants << variant_one.payload
137
+ experiment.variants << variant_two.payload
138
+ ab_test = UA::AbTest.new(client: airship)
139
+ ab_test.experiment_object = experiment.payload
140
+ ab_test.validate_ab_test
141
+
142
+ .. note::
143
+
144
+ Should return a 200 HTTP status code.
145
+
146
+ Individual A/B Test Lookup
147
+ --------------------------
148
+
149
+ This will lookup a specific A/B Test with a given experiment_id
150
+
151
+ .. code-block:: ruby
152
+
153
+ require 'urbanairship'
154
+ UA = Urbanairship
155
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
156
+ ab_test = UA::AbTest.new(client: airship)
157
+ ab_test.experiment_id = '<experiment_id>'
158
+ ab_test.lookup_ab_test
159
+
160
+ .. note::
161
+
162
+ Should return a 200 HTTP status code
@@ -0,0 +1,212 @@
1
+ Automations
2
+ ===========
3
+
4
+ The Automation class harnesses the Pipeline class in order to provide functionality
5
+ for creating, listing, validating, updating, and deleting pipelines. There are a lot
6
+ of moving parts that go into creating a pipeline, so please view our docs on that
7
+ topic here: https://docs.airship.com/api/ua/#schemas%2fpipelineobject
8
+
9
+ List Existing Automations
10
+ -------------------------
11
+
12
+ This is for viewing existing pipeleines for a project. There are optional parameters
13
+ that can be passed into the URI to have control over what pipelines are returned. In the
14
+ following example a limit query of 5 will be added to the URI.
15
+
16
+ .. code-block:: ruby
17
+
18
+ require 'urbanairship'
19
+ UA = Urbanairship
20
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
21
+ automation = UA::Automation.new(client: airship)
22
+ automation.limit = 5
23
+ automation.list_automations
24
+
25
+ .. note::
26
+
27
+ Should return a 200 HTTP status code, and 5 of the most recent Automations
28
+
29
+ Create Automation
30
+ -----------------
31
+
32
+ This will use the Pipeline model to create an automation. You may add several
33
+ pipelines objects to create several automations/pipelines at once. The example
34
+ below adds two. If you would like to just add one pipeline, forgo the array,
35
+ and assign the pipeline payload directly to automation.pipeline_object.
36
+
37
+ .. code-block:: ruby
38
+
39
+ require 'urbanairship'
40
+ UA = Urbanairship
41
+ airship = UA::Client.new(key:'<app_key>', secret:'<app_secret>')
42
+ pipeline_one = UA::Pipeline.new(client: airship)
43
+ pipeline_one.enabled = true
44
+ pipeline_one.immediate_trigger = {
45
+ "tag_added": {
46
+ "tag": "new_customer",
47
+ "group": "crm"
48
+ }
49
+ }
50
+ pipeline_one.outcome = {
51
+ "push": {
52
+ "audience": "triggered",
53
+ "device_types": "all",
54
+ "notification": {
55
+ "alert": "Hello new customer!"
56
+ }
57
+ }
58
+ }
59
+ pipeline_two = UA::Pipeline.new(client: airship)
60
+ pipeline_two.enabled = true
61
+ pipeline_two.immediate_trigger = {
62
+ "tag_added": {
63
+ "tag": "new_customer",
64
+ "group": "crm"
65
+ }
66
+ }
67
+ pipeline_two.outcome = {
68
+ "push": {
69
+ "audience": "triggered",
70
+ "device_types": "all",
71
+ "notification": {
72
+ "alert": "Here is a different second alert!"
73
+ }
74
+ }
75
+ }
76
+ pipelines = [pipeline_one.payload, pipeline_two.payload]
77
+ automation = UA::Automation.new(client: airship)
78
+ automation.pipeline_object = pipelines
79
+ automation.create_automation
80
+
81
+ .. note::
82
+
83
+ Should return a 201 HTTP status code.
84
+
85
+ List Deleted Automations
86
+ ------------------------
87
+
88
+ This is for viewing deleted pipeleines for a project. The optional param here is for "start";
89
+ a timestamp of the starting element for paginating results in the format of YYYY-MM-DD.
90
+
91
+ .. code-block:: ruby
92
+
93
+ require 'urbanairship'
94
+ UA = Urbanairship
95
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
96
+ automation = UA::Automation.new(client: airship)
97
+ automation.start = 2020-02-20
98
+ automation.list_deleted_automations
99
+
100
+ .. note::
101
+
102
+ Should return a 200 HTTP status code, and the deleted automations from either most current
103
+ or from a given start date.
104
+
105
+ Validate Automation
106
+ -------------------
107
+
108
+ This endpoint is a lot like the create automation endpoint, the basic set up is the same,
109
+ only difference here is the method selected.
110
+
111
+ .. code-block:: ruby
112
+
113
+ require 'urbanairship'
114
+ UA = Urbanairship
115
+ airship = UA::Client.new(key:'<app_key>', secret:'<app_secret>')
116
+ pipeline = UA::Pipeline.new(client: airship)
117
+ pipeline.enabled = true
118
+ pipeline.immediate_trigger = {
119
+ "tag_added": {
120
+ "tag": "new_customer",
121
+ "group": "crm"
122
+ }
123
+ }
124
+ pipeline.outcome = {
125
+ "push": {
126
+ "audience": "triggered",
127
+ "device_types": "all",
128
+ "notification": {
129
+ "alert": "Hello new customer!"
130
+ }
131
+ }
132
+ }
133
+ automation = UA::Automation.new(client: airship)
134
+ automation.pipeline_object = pipeline.payload
135
+ automation.validate_automation
136
+
137
+ .. note::
138
+
139
+ Should return a 200 HTTP status code.
140
+
141
+ Individual Automation Lookup
142
+ ----------------------------
143
+
144
+ This is for looking up a single automation with a given ID.
145
+
146
+ .. code-block:: ruby
147
+
148
+ require 'urbanairship'
149
+ UA = Urbanairship
150
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
151
+ automation = UA::Automation.new(client: airship)
152
+ automation.pipeline_id = '86ad9239-373d-d0a5-d5d8-04fed18f79bc'
153
+ automation.lookup_automation
154
+
155
+ .. note::
156
+
157
+ Should return a 200 HTTP status code, and the payload for the automation in question.
158
+
159
+ Update Automation
160
+ -----------------
161
+
162
+ This is for updating an existing automation. You must include the full payload from a POST
163
+ response, with the updates that you want to make within the payload.
164
+
165
+ .. code-block:: ruby
166
+
167
+ require 'urbanairship'
168
+ UA = Urbanairship
169
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
170
+ pipeline = UA::Pipeline.new(client: airship)
171
+ pipeline.enabled = true
172
+ pipeline.immediate_trigger = {
173
+ "tag_added": {
174
+ "tag": "new_tag_update",
175
+ "group": "Locale"
176
+ }
177
+ }
178
+ pipeline.outcome = {
179
+ "push": {
180
+ "audience": "triggered",
181
+ "device_types": "all",
182
+ "notification": {
183
+ "alert": "Newly created alert message!"
184
+ }
185
+ }
186
+ }
187
+ automation = UA::Automation.new(client: airship)
188
+ automation.pipeline_id = '0f927674-918c-31ef-51ca-e96fdd234da4'
189
+ automation.pipeline_object = pipeline.payload
190
+ automation.update_automation
191
+
192
+ .. note::
193
+
194
+ Should return a 200 HTTP status code.
195
+
196
+ Delete Automation
197
+ -----------------
198
+
199
+ This is for deleting a pipeline with a given ID.
200
+
201
+ .. code-block:: ruby
202
+
203
+ require 'urbanairship'
204
+ UA = Urbanairship
205
+ airship = UA::Client.new(key:'<app_key>', secret:'<secret_key>')
206
+ automation = UA::Automation.new(client: airship)
207
+ automation.pipeline_id = '86ad9239-373d-d0a5-d5d8-04fed18f79bc'
208
+ automation.delete_automation
209
+
210
+ .. note::
211
+
212
+ Response should be a 204 No Content
@@ -23,6 +23,11 @@ require 'urbanairship/devices/open_channel'
23
23
  require 'urbanairship/reports/response_statistics'
24
24
  require 'urbanairship/devices/static_lists'
25
25
  require 'urbanairship/push/location'
26
+ require 'urbanairship/automations/pipeline'
27
+ require 'urbanairship/automations/automation'
28
+ require 'urbanairship/ab_tests/variant'
29
+ require 'urbanairship/ab_tests/experiment'
30
+ require 'urbanairship/ab_tests/ab_test'
26
31
 
27
32
  module Urbanairship
28
33
  extend Urbanairship::Push::Audience
@@ -32,6 +37,8 @@ module Urbanairship
32
37
  include Urbanairship::Devices
33
38
  include Urbanairship::Reports
34
39
  include Urbanairship::Push
40
+ include Urbanairship::Automations
41
+ include Urbanairship::AbTests
35
42
 
36
43
  class << self
37
44
  attr_accessor :configuration
@@ -0,0 +1,89 @@
1
+ require 'uri'
2
+ require 'urbanairship'
3
+ require 'urbanairship/ab_tests/experiment'
4
+
5
+ module Urbanairship
6
+ module AbTests
7
+ class AbTest
8
+ include Urbanairship::Common
9
+ include Urbanairship::Loggable
10
+ attr_accessor :limit,
11
+ :offset,
12
+ :experiment_object,
13
+ :experiment_id
14
+
15
+ def initialize(client: required('client'))
16
+ @client = client
17
+ end
18
+
19
+ def list_ab_test
20
+ response = @client.send_request(
21
+ method: 'GET',
22
+ url: EXPERIMENTS_URL + format_url_with_params
23
+ )
24
+ logger.info("Looking up A/B Tests for project")
25
+ response
26
+ end
27
+
28
+ def create_ab_test
29
+ response = @client.send_request(
30
+ method: 'POST',
31
+ body: JSON.dump(experiment_object),
32
+ url: EXPERIMENTS_URL,
33
+ content_type: 'application/json'
34
+ )
35
+ logger.info("Created A/B Test")
36
+ response
37
+ end
38
+
39
+ def list_scheduled_ab_test
40
+ response = @client.send_request(
41
+ method: 'GET',
42
+ url: EXPERIMENTS_URL + 'scheduled' + format_url_with_params
43
+ )
44
+ logger.info("Looking up scheduled A/B Tests for project")
45
+ response
46
+ end
47
+
48
+ def delete_ab_test
49
+ fail ArgumentError, 'experiment_id must be set to delete individual A/B test' if @experiment_id.nil?
50
+ response = @client.send_request(
51
+ method: 'DELETE',
52
+ url: EXPERIMENTS_URL + 'scheduled/' + experiment_id
53
+ )
54
+ logger.info("Deleting A/B test with ID #{experiment_id}")
55
+ response
56
+ end
57
+
58
+ def validate_ab_test
59
+ response = @client.send_request(
60
+ method: 'POST',
61
+ body: JSON.dump(experiment_object),
62
+ url: EXPERIMENTS_URL + 'validate',
63
+ content_type: 'application/json'
64
+ )
65
+ logger.info("Validating A/B Test")
66
+ response
67
+ end
68
+
69
+ def lookup_ab_test
70
+ fail ArgumentError, 'experiment_id must be set to lookup individual A/B Test' if @experiment_id.nil?
71
+ response = @client.send_request(
72
+ method: 'GET',
73
+ url: EXPERIMENTS_URL + experiment_id
74
+ )
75
+ logger.info("Looking up A/B test with ID #{experiment_id}")
76
+ response
77
+ end
78
+
79
+ def format_url_with_params
80
+ params = []
81
+ params << ['limit', limit] if limit
82
+ params << ['offset', offset] if offset
83
+ query = URI.encode_www_form(params)
84
+ '?' + query
85
+ end
86
+ end
87
+ end
88
+ end
89
+
@@ -0,0 +1,45 @@
1
+ require 'urbanairship'
2
+
3
+ module Urbanairship
4
+ module AbTests
5
+ class Experiment
6
+ include Urbanairship::Common
7
+ include Urbanairship::Loggable
8
+ attr_accessor :audience,
9
+ :campaigns,
10
+ :control,
11
+ :created_at,
12
+ :description,
13
+ :device_types,
14
+ :id,
15
+ :name,
16
+ :push_id,
17
+ :variants
18
+
19
+ def initialize(client: required('client'))
20
+ @client = client
21
+ @variants = []
22
+ end
23
+
24
+ def payload
25
+ fail ArgumentError, 'audience is required for experiment' if @audience.nil?
26
+ fail ArgumentError, 'device_types is required for experiment' if @device_types.nil?
27
+ fail ArgumentError, 'variant cannot be empty for experiment' if @variants.empty?
28
+
29
+ {
30
+ 'name': name,
31
+ 'description': description,
32
+ 'control': control,
33
+ 'audience': audience,
34
+ 'device_types': device_types,
35
+ 'campaigns': campaigns,
36
+ 'variants': variants,
37
+ 'id': id,
38
+ 'created_at': created_at,
39
+ 'push_id': push_id
40
+ }.delete_if {|key, value| value.nil?} #this removes the nil key value pairs
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,34 @@
1
+ require 'urbanairship'
2
+
3
+ module Urbanairship
4
+ module AbTests
5
+ class Variant
6
+ include Urbanairship::Common
7
+ include Urbanairship::Loggable
8
+ attr_accessor :description,
9
+ :id,
10
+ :name,
11
+ :push,
12
+ :schedule,
13
+ :weight
14
+
15
+ def initialize(client: required('client'))
16
+ @client = client
17
+ end
18
+
19
+ def payload
20
+ fail ArgumentError, 'a push must be added to create a variant' if @push.nil?
21
+
22
+ {
23
+ 'description': description,
24
+ 'id': id,
25
+ 'name': name,
26
+ 'push': push,
27
+ 'schedule': schedule,
28
+ 'weight': weight
29
+ }.delete_if {|key, value| value.nil?} #this removes the nil key value pairs
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,105 @@
1
+ require 'uri'
2
+ require 'urbanairship'
3
+ require 'urbanairship/automations/pipeline'
4
+
5
+ module Urbanairship
6
+ module Automations
7
+ class Automation
8
+ include Urbanairship::Common
9
+ include Urbanairship::Loggable
10
+ attr_accessor :limit,
11
+ :enabled,
12
+ :offset,
13
+ :start,
14
+ :pipeline_id,
15
+ :pipeline_object
16
+
17
+ def initialize(client: required('client'))
18
+ @client = client
19
+ end
20
+
21
+ def create_automation
22
+ response = @client.send_request(
23
+ method: 'POST',
24
+ body: JSON.dump(pipeline_object),
25
+ url: PIPELINES_URL,
26
+ content_type: 'application/json'
27
+ )
28
+ logger.info("Created Automation")
29
+ response
30
+ end
31
+
32
+ def list_automations
33
+ response = @client.send_request(
34
+ method: 'GET',
35
+ url: PIPELINES_URL + format_url_with_params
36
+ )
37
+ logger.info("Looking up automations for project")
38
+ response
39
+ end
40
+
41
+ def list_deleted_automations
42
+ response = @client.send_request(
43
+ method: 'GET',
44
+ url: PIPELINES_URL + 'deleted' + format_url_with_params
45
+ )
46
+ logger.info("Looking up deleted automations for project")
47
+ response
48
+ end
49
+
50
+ def validate_automation
51
+ response = @client.send_request(
52
+ method: 'POST',
53
+ body: JSON.dump(pipeline_object),
54
+ url: PIPELINES_URL + 'validate',
55
+ content_type: 'application/json'
56
+ )
57
+ logger.info("Validating Automation")
58
+ response
59
+ end
60
+
61
+ def lookup_automation
62
+ fail ArgumentError, 'pipeline_id must be set to lookup individual automation' if @pipeline_id.nil?
63
+ response = @client.send_request(
64
+ method: 'GET',
65
+ url: PIPELINES_URL + pipeline_id
66
+ )
67
+ logger.info("Looking up automation with id #{pipeline_id}")
68
+ response
69
+ end
70
+
71
+ def update_automation
72
+ fail ArgumentError, 'pipeline_id must be set to update individual automation' if @pipeline_id.nil?
73
+
74
+ response = @client.send_request(
75
+ method: 'PUT',
76
+ body: JSON.dump(pipeline_object),
77
+ url: PIPELINES_URL + pipeline_id,
78
+ content_type: 'application/json'
79
+ )
80
+ logger.info("Validating Automation")
81
+ response
82
+ end
83
+
84
+ def delete_automation
85
+ fail ArgumentError, 'pipeline_id must be set to delete individual automation' if @pipeline_id.nil?
86
+ response = @client.send_request(
87
+ method: 'DELETE',
88
+ url: PIPELINES_URL + pipeline_id
89
+ )
90
+ logger.info("Deleting automation with id #{pipeline_id}")
91
+ response
92
+ end
93
+
94
+ def format_url_with_params
95
+ params = []
96
+ params << ['limit', limit] if limit
97
+ params << ['enabled', enabled] if enabled
98
+ params << ['offset', offset] if offset
99
+ params << ['start', start] if start
100
+ query = URI.encode_www_form(params)
101
+ '?' + query
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,52 @@
1
+ require 'urbanairship'
2
+
3
+ module Urbanairship
4
+ module Automations
5
+ class Pipeline
6
+ include Urbanairship::Common
7
+ include Urbanairship::Loggable
8
+ attr_accessor :activation_time,
9
+ :cancellation_trigger,
10
+ :condition,
11
+ :constraint,
12
+ :creation_time,
13
+ :deactivation_time,
14
+ :historical_trigger,
15
+ :immediate_trigger,
16
+ :last_modified_time,
17
+ :name,
18
+ :status,
19
+ :timing,
20
+ :url,
21
+ :enabled,
22
+ :outcome
23
+
24
+ def initialize(client: required('client'))
25
+ @client = client
26
+ end
27
+
28
+ def payload
29
+ fail ArgumentError, 'enabled must be set to create pipeline payload' if @enabled.nil?
30
+ fail ArgumentError, 'outcome must be set to create pipeline payload' if @outcome.nil?
31
+ {
32
+ activation_time: activation_time,
33
+ cancellation_trigger: cancellation_trigger,
34
+ condition: condition,
35
+ constraint: constraint,
36
+ creation_time: creation_time,
37
+ deactivation_time: deactivation_time,
38
+ enabled: enabled,
39
+ historical_trigger: historical_trigger,
40
+ immediate_trigger: immediate_trigger,
41
+ last_modified_time: last_modified_time,
42
+ name: name,
43
+ outcome: outcome,
44
+ status: status,
45
+ timing: timing,
46
+ url: url
47
+ }.delete_if {|key, value| value.nil?} #this removes the nil key value pairs
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -20,6 +20,7 @@ module Urbanairship
20
20
  FEEDS_URL = BASE_URL + '/feeds/'
21
21
  LOCATION_URL = BASE_URL + '/location/'
22
22
  CREATE_AND_SEND_URL = BASE_URL + '/create-and-send/'
23
+ EXPERIMENTS_URL = BASE_URL + '/experiments/'
23
24
 
24
25
  # Helper method for required keyword args in Ruby 2.0 that is compatible with 2.1+
25
26
  # @example
@@ -8,9 +8,17 @@ module Urbanairship
8
8
 
9
9
  # A Push Notification.
10
10
  class Push
11
- attr_writer :client, :audience, :notification, :options,
12
- :device_types, :message, :in_app
13
- attr_reader :device_types, :audience
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: @audience,
27
- notification: @notification,
28
- options: @options,
29
- device_types: @device_types,
30
- message: @message,
31
- in_app: @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
 
@@ -1,3 +1,3 @@
1
1
  module Urbanairship
2
- VERSION = '5.6.1'
2
+ VERSION = '5.7.0'
3
3
  end
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: 5.6.1
4
+ version: 5.7.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: 2020-06-02 00:00:00.000000000 Z
11
+ date: 2020-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -138,6 +138,8 @@ files:
138
138
  - bin/console
139
139
  - bin/setup
140
140
  - docs/Makefile
141
+ - docs/ab_tests.rst
142
+ - docs/automations.rst
141
143
  - docs/channel_uninstall.rst
142
144
  - docs/conf.py
143
145
  - docs/create_and_send.rst
@@ -157,6 +159,11 @@ files:
157
159
  - docs/tags.rst
158
160
  - example/pusher.rb
159
161
  - lib/urbanairship.rb
162
+ - lib/urbanairship/ab_tests/ab_test.rb
163
+ - lib/urbanairship/ab_tests/experiment.rb
164
+ - lib/urbanairship/ab_tests/variant.rb
165
+ - lib/urbanairship/automations/automation.rb
166
+ - lib/urbanairship/automations/pipeline.rb
160
167
  - lib/urbanairship/client.rb
161
168
  - lib/urbanairship/common.rb
162
169
  - lib/urbanairship/configuration.rb
@@ -188,7 +195,7 @@ licenses:
188
195
  - Apache-2.0
189
196
  metadata:
190
197
  allowed_push_host: https://rubygems.org
191
- post_install_message:
198
+ post_install_message:
192
199
  rdoc_options: []
193
200
  require_paths:
194
201
  - lib
@@ -204,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
211
  version: '0'
205
212
  requirements: []
206
213
  rubygems_version: 3.0.1
207
- signing_key:
214
+ signing_key:
208
215
  specification_version: 4
209
216
  summary: Ruby Gem for using the Airship API
210
217
  test_files: []