urbanairship 5.9.0 → 8.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6dbcc6fe1884df9f5beb53e6bc29406d2d4cb51aabfab22cc45f67b714104064
4
- data.tar.gz: d147e04cbeadbb51e13325ff9cd5b7af458aa22531b8aab2e4ef0c19544ae15c
3
+ metadata.gz: a1da985a2097fce219436538dbaa215aae47b9649ae658dd5ae16af3c3675bd8
4
+ data.tar.gz: ecf18938527e132580ed887081a89db81aab4665286431b06d268c3a2a6b7505
5
5
  SHA512:
6
- metadata.gz: 7109db5053551032e3c6f933d07e39496b1f8d530349dba64a0b0b1d0b09ed5d2cbec46f89bd3adfe340cbfc0601d0ca089bcf17d302ad498959790915819096
7
- data.tar.gz: 2e6366c2f3cbb0b35bbb68e78a1752fd32ddfeefe7316ddbcaa609b5971947d8e01c898672eee1eec617ecef222bc36928a972fefcb2b18bad0406993813536b
6
+ metadata.gz: a3f2dad9fb10c281a0e10c1eacddb2fd26f0ec76af4c1a6a4fe0da3ddf83648f29e6762b0cbd756d81a2fadf2a0499fb8ead0c2a873d199ec2df05f16449edea
7
+ data.tar.gz: 4ec1e9d2b3f145446e6a6f5bbbb1d13bc79676186335aad7e5b36779f76a34ee41fff2e48cb15eac6dbf89013a27d71ad66742534999dba654f8c656811bcc05
@@ -15,8 +15,8 @@ Please include link to open issue if applicable.
15
15
 
16
16
  * I've tested for Ruby versions:
17
17
 
18
- - [ ] 2.2.5
19
- - [ ] 2.3.1
18
+ - [ ] 2.6.7
19
+ - [ ] 2.7.3
20
20
 
21
21
  ### Airship Contribution Agreement
22
22
  [Link here](https://docs.google.com/forms/d/e/1FAIpQLScErfiz-fXSPpVZ9r8Di2Tr2xDFxt5MgzUel0__9vqUgvko7Q/viewform)
@@ -0,0 +1,23 @@
1
+ name: Ruby Build
2
+
3
+ on: [ push ]
4
+
5
+ jobs:
6
+ test:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ strategy:
11
+ matrix:
12
+ ruby-version: [2.7.3, 2.6.7]
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Set up Ruby ${{ matrix.ruby-version }}
17
+ uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ - name: Install dependencies
21
+ run: bundle install
22
+ - name: Run tests
23
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -10,6 +10,7 @@
10
10
  /spec/reports/
11
11
  /tmp/
12
12
  /csv_file
13
+ .vscode/
13
14
 
14
15
  # App
15
16
  urbanairship.log
data/CHANGELOG CHANGED
@@ -1,3 +1,28 @@
1
+ --------------------
2
+ 8.0.1
3
+ --------------------
4
+ - Adds app key to user agent string on request
5
+
6
+ --------------------
7
+ 8.0.0
8
+ --------------------
9
+ - Updates officially supported versions to 2.6.7 and 2.7.2
10
+ - Fixes headers to reduce warning messages
11
+ - Fixes for multiple mis-set named user urls
12
+ - Fix to automatically convert an integer named user to a string so it can be successfully submitted
13
+ - Adds attribute support for named users
14
+
15
+ --------------------
16
+ 7.0.0
17
+ --------------------
18
+ - Refactors base url naming
19
+
20
+ --------------------
21
+ 6.0.0
22
+ --------------------
23
+ - Creates custom base url, and refactors urls within classes
24
+ - Adds support for sending custom events
25
+
1
26
  --------------------
2
27
  5.9.0
3
28
  --------------------
data/README.rst CHANGED
@@ -1,6 +1,5 @@
1
- .. image:: https://travis-ci.org/urbanairship/ruby-library.svg?branch=master
2
- :target: https://travis-ci.org/urbanairship/ruby-library
3
-
1
+ .. image:: https://github.com/urbanairship/ruby-library/actions/workflows/ci.yaml/badge.svg
2
+ :target: https://github.com/urbanairship/ruby-library/
4
3
  About
5
4
  =====
6
5
 
@@ -14,16 +13,16 @@ Requirements
14
13
 
15
14
  We officially support the following Ruby versions::
16
15
 
17
- 2.2.5
18
- 2.3.1
16
+ 2.6.7
17
+ 2.7.2
19
18
 
20
- Newer versions should work as well.
19
+ Newer 2.x versions should work as well.
21
20
 
22
21
 
23
22
  Functionality
24
23
  =============
25
24
 
26
- Version 5.0 is a major upgrade, as some features have been removed that were present in earlier versions. A more detailed list of changes can be found in the CHANGELOG.
25
+ Version 8.0 is a major upgrade, as we have changed the tested/supported versions of Ruby. A more detailed list of changes can be found in the CHANGELOG.
27
26
 
28
27
 
29
28
  Questions
@@ -38,17 +37,23 @@ Installation
38
37
 
39
38
  If you have the ``bundler`` gem (if not you can get it with
40
39
  ``$ gem install bundler``) add this line to your application's
41
- Gemfile::
40
+ Gemfile:
41
+
42
+ .. code-block::
43
+
44
+ >>> $ gem 'urbanairship'
45
+
46
+ And then execute:
42
47
 
43
- >>> gem 'urbanairship'
48
+ .. code-block::
44
49
 
45
- And then execute::
50
+ >>> $ bundle
46
51
 
47
- >>> $ bundle
52
+ OR install it yourself as:
48
53
 
49
- OR install it yourself as::
54
+ .. code-block::
50
55
 
51
- >>> gem install urbanairship
56
+ >>> $ gem install urbanairship
52
57
 
53
58
 
54
59
  Configuration
@@ -56,27 +61,35 @@ Configuration
56
61
 
57
62
  In your app initialization, you can do something like the following:
58
63
 
59
- >>> require 'urbanairship'
60
- >>> Urbanairship.configure do |config|
61
- >>> config.log_path = '/path/to/your/logfile'
62
- >>> config.log_level = Logger::WARN
63
- >>> config.timeout = 60
64
- >>> end
64
+ .. code-block:: ruby
65
+
66
+ require 'urbanairship'
67
+
68
+ Urbanairship.configure do |config|
69
+ config.server = 'go.airship.eu'
70
+ config.log_path = '/path/to/your/logfile'
71
+ config.log_level = Logger::WARN
72
+ config.timeout = 60
73
+ end
74
+
65
75
 
66
76
  If you want to use a custom logger (e.g Rails.logger), you can do:
67
77
 
68
- >>> require 'urbanairship'
69
- >>> Urbanairship.configure do |config|
70
- >>> config.custom_logger = Rails.logger
71
- >>> config.log_level = Logger::WARN
72
- >>> config.timeout = 60
73
- >>> end
78
+ .. code-block:: ruby
79
+
80
+ require 'urbanairship'
81
+
82
+ Urbanairship.configure do |config|
83
+ config.custom_logger = Rails.logger
84
+ config.log_level = Logger::WARN
85
+ end
74
86
 
75
87
  Available Configurations
76
88
  ------------------------
77
89
 
78
90
  - **log_path**: Allows to define the folder where the log file will be created (the default is nil).
79
91
  - **log_level**: Allows to define the log level and only messages at that level or higher will be printed (the default is INFO).
92
+ - **server**: Allow to define the Airship server you want to use ("go.airship.eu" or "go.urbanairship.com")
80
93
  - **timeout**: Allows to define the request timeout in seconds (the default is 5).
81
94
 
82
95
 
@@ -96,28 +109,71 @@ information.
96
109
  Broadcast to All Devices
97
110
  ------------------------
98
111
 
99
- >>> require 'urbanairship'
100
- >>> UA = Urbanairship
101
- >>> airship = UA::Client.new(key:'application_key', secret:'master_secret')
102
- >>> p = airship.create_push
103
- >>> p.audience = UA.all
104
- >>> p.notification = UA.notification(alert: 'Hello')
105
- >>> p.device_types = UA.all
106
- >>> p.send_push
112
+ .. code-block:: ruby
113
+
114
+ require 'urbanairship'
115
+
116
+ UA = Urbanairship
107
117
 
118
+ airship = UA::Client.new(key:'application_key', secret:'master_secret')
119
+ p = airship.create_push
120
+ p.audience = UA.all
121
+ p.notification = UA.notification(alert: 'Hello')
122
+ p.device_types = UA.all
123
+ p.send_push
108
124
 
109
125
  Simple Tag Push
110
126
  ---------------
111
127
 
112
- >>> require 'urbanairship'
113
- >>> UA = Urbanairship
114
- >>> airship = UA::Client.new(key:'application_key', secret:'master_secret')
115
- >>> p = airship.create_push
116
- >>> p.audience = UA.tag('some_tag')
117
- >>> p.notification = UA.notification(alert: 'Hello')
118
- >>> p.device_types = UA.all
119
- >>> p.send_push
128
+ .. code-block:: ruby
129
+
130
+ require 'urbanairship'
131
+
132
+ UA = Urbanairship
133
+
134
+ airship = UA::Client.new(key:'application_key', secret:'master_secret')
135
+ p = airship.create_push
136
+ p.audience = UA.tag('some_tag')
137
+ p.notification = UA.notification(alert: 'Hello')
138
+ p.device_types = UA.all
139
+ p.send_push
140
+
141
+ Specify the Airship server used to make your requests
142
+ -----------------------------------------------------
143
+ By default, the request will be sent to the 'go.urbanairship.com' server:
144
+
145
+ .. code-block:: ruby
146
+
147
+ require 'urbanairship'
148
+
149
+ Urbanairship::Client.new(key:'application_key', secret:'master_secret')
150
+
151
+ You can change the server globally in the Urbanairship configuration:
152
+
153
+ .. code-block:: ruby
154
+
155
+ require 'urbanairship'
156
+
157
+ Urbanairship.configure do |config|
158
+ config.server = 'go.airship.eu'
159
+ end
160
+
161
+ Urbanairship::Client.new(key:'application_key', secret:'master_secret')
162
+ # request will be sent to the 'go.airship.eu' server
163
+
164
+ Finally, you can change the targeted server on a request basis:
165
+
166
+ .. code-block:: ruby
167
+
168
+ require 'urbanairship'
169
+
170
+ Urbanairship.configure do |config|
171
+ config.server = 'go.airship.eu'
172
+ end
120
173
 
174
+ Urbanairship::Client.new(key:'application_key', secret:'master_secret', server: 'go.urbanairship.com')
175
+ # The Urbanairship configuration is overridden by the client and the
176
+ # request will be sent to the 'go.urbanairship.com' server
121
177
 
122
178
  Contributing
123
179
  ============
data/docs/attributes.rst CHANGED
@@ -24,6 +24,27 @@ The following will set an attribute for a given channel ID.
24
24
 
25
25
  This should return a 200 response
26
26
 
27
+ Set or Remove Attributes for a Named User
28
+ -----------------------------------------
29
+
30
+ The following example shows you how to set and remove attributes on a given named user.
31
+
32
+ .. code-block:: ruby
33
+
34
+ require 'urbanairship'
35
+ airship = Urbanairship::Client.new(key: 'application_key', secret: 'master_secret')
36
+ named_user = Urbanairship::NamedUser.new(client: airship)
37
+ named_user.named_user_id = 'named_user'
38
+ named_user.update_attributes(attributes: [
39
+ { action: 'set', key: 'first_name', value: 'Firstname' },
40
+ { action: 'remove', key: 'nickname' },
41
+ { action: 'set', key: 'last_name', value: 'Lastname', timestamp: Time.now.utc }
42
+ ])
43
+
44
+ .. note::
45
+
46
+ Timestamp is optional, if missing it will default to 'now'
47
+
27
48
  Send Push to Audience with Attribute Specifications
28
49
  ---------------------------------------------------
29
50
 
data/docs/named_user.rst CHANGED
@@ -100,3 +100,25 @@ see `the API documentation
100
100
 
101
101
  A single request may contain an add or remove field, both, or a single set
102
102
  field.
103
+
104
+ Attributes
105
+ ----------
106
+
107
+ Set or remove attributes on a named user. For more information, see `the API documentation
108
+ https://docs.airship.com/api/ua/#operation-api-named_users-named_user_id-attributes-post>`__
109
+
110
+ .. code-block:: ruby
111
+
112
+ require 'urbanairship'
113
+ airship = Urbanairship::Client.new(key: 'application_key', secret: 'master_secret')
114
+ named_user = Urbanairship::NamedUser.new(client: airship)
115
+ named_user.named_user_id = 'named_user'
116
+ named_user.update_attributes(attributes: [
117
+ { action: 'set', key: 'first_name', value: 'Firstname' },
118
+ { action: 'remove', key: 'nickname' },
119
+ { action: 'set', key: 'last_name', value: 'Lastname', timestamp: Time.now.utc }
120
+ ])
121
+
122
+ .. note::
123
+
124
+ Timestamp is optional, if missing it will default to 'now'.
@@ -11,7 +11,7 @@ module Urbanairship
11
11
  :offset,
12
12
  :experiment_object,
13
13
  :experiment_id
14
-
14
+
15
15
  def initialize(client: required('client'))
16
16
  @client = client
17
17
  end
@@ -19,7 +19,7 @@ module Urbanairship
19
19
  def list_ab_test
20
20
  response = @client.send_request(
21
21
  method: 'GET',
22
- url: EXPERIMENTS_URL + format_url_with_params
22
+ path: experiments_path(format_url_with_params)
23
23
  )
24
24
  logger.info("Looking up A/B Tests for project")
25
25
  response
@@ -29,7 +29,7 @@ module Urbanairship
29
29
  response = @client.send_request(
30
30
  method: 'POST',
31
31
  body: JSON.dump(experiment_object),
32
- url: EXPERIMENTS_URL,
32
+ path: experiments_path,
33
33
  content_type: 'application/json'
34
34
  )
35
35
  logger.info("Created A/B Test")
@@ -39,7 +39,7 @@ module Urbanairship
39
39
  def list_scheduled_ab_test
40
40
  response = @client.send_request(
41
41
  method: 'GET',
42
- url: EXPERIMENTS_URL + 'scheduled' + format_url_with_params
42
+ path: experiments_path('scheduled' + format_url_with_params)
43
43
  )
44
44
  logger.info("Looking up scheduled A/B Tests for project")
45
45
  response
@@ -49,7 +49,7 @@ module Urbanairship
49
49
  fail ArgumentError, 'experiment_id must be set to delete individual A/B test' if @experiment_id.nil?
50
50
  response = @client.send_request(
51
51
  method: 'DELETE',
52
- url: EXPERIMENTS_URL + 'scheduled/' + experiment_id
52
+ path: experiments_path('scheduled/' + experiment_id)
53
53
  )
54
54
  logger.info("Deleting A/B test with ID #{experiment_id}")
55
55
  response
@@ -59,7 +59,7 @@ module Urbanairship
59
59
  response = @client.send_request(
60
60
  method: 'POST',
61
61
  body: JSON.dump(experiment_object),
62
- url: EXPERIMENTS_URL + 'validate',
62
+ path: experiments_path('validate'),
63
63
  content_type: 'application/json'
64
64
  )
65
65
  logger.info("Validating A/B Test")
@@ -70,7 +70,7 @@ module Urbanairship
70
70
  fail ArgumentError, 'experiment_id must be set to lookup individual A/B Test' if @experiment_id.nil?
71
71
  response = @client.send_request(
72
72
  method: 'GET',
73
- url: EXPERIMENTS_URL + experiment_id
73
+ path: experiments_path(experiment_id)
74
74
  )
75
75
  logger.info("Looking up A/B test with ID #{experiment_id}")
76
76
  response
@@ -85,5 +85,4 @@ module Urbanairship
85
85
  end
86
86
  end
87
87
  end
88
- end
89
-
88
+ end
@@ -22,7 +22,7 @@ module Urbanairship
22
22
  response = @client.send_request(
23
23
  method: 'POST',
24
24
  body: JSON.dump(pipeline_object),
25
- url: PIPELINES_URL,
25
+ path: pipelines_path,
26
26
  content_type: 'application/json'
27
27
  )
28
28
  logger.info("Created Automation")
@@ -32,7 +32,7 @@ module Urbanairship
32
32
  def list_automations
33
33
  response = @client.send_request(
34
34
  method: 'GET',
35
- url: PIPELINES_URL + format_url_with_params
35
+ path: pipelines_path(format_url_with_params)
36
36
  )
37
37
  logger.info("Looking up automations for project")
38
38
  response
@@ -41,7 +41,7 @@ module Urbanairship
41
41
  def list_deleted_automations
42
42
  response = @client.send_request(
43
43
  method: 'GET',
44
- url: PIPELINES_URL + 'deleted' + format_url_with_params
44
+ path: pipelines_path('deleted' + format_url_with_params)
45
45
  )
46
46
  logger.info("Looking up deleted automations for project")
47
47
  response
@@ -51,18 +51,18 @@ module Urbanairship
51
51
  response = @client.send_request(
52
52
  method: 'POST',
53
53
  body: JSON.dump(pipeline_object),
54
- url: PIPELINES_URL + 'validate',
54
+ path: pipelines_path('validate'),
55
55
  content_type: 'application/json'
56
56
  )
57
57
  logger.info("Validating Automation")
58
58
  response
59
59
  end
60
60
 
61
- def lookup_automation
61
+ def lookup_automation
62
62
  fail ArgumentError, 'pipeline_id must be set to lookup individual automation' if @pipeline_id.nil?
63
63
  response = @client.send_request(
64
64
  method: 'GET',
65
- url: PIPELINES_URL + pipeline_id
65
+ path: pipelines_path(pipeline_id)
66
66
  )
67
67
  logger.info("Looking up automation with id #{pipeline_id}")
68
68
  response
@@ -70,22 +70,22 @@ module Urbanairship
70
70
 
71
71
  def update_automation
72
72
  fail ArgumentError, 'pipeline_id must be set to update individual automation' if @pipeline_id.nil?
73
-
73
+
74
74
  response = @client.send_request(
75
75
  method: 'PUT',
76
76
  body: JSON.dump(pipeline_object),
77
- url: PIPELINES_URL + pipeline_id,
77
+ path: pipelines_path(pipeline_id),
78
78
  content_type: 'application/json'
79
79
  )
80
80
  logger.info("Validating Automation")
81
81
  response
82
82
  end
83
83
 
84
- def delete_automation
84
+ def delete_automation
85
85
  fail ArgumentError, 'pipeline_id must be set to delete individual automation' if @pipeline_id.nil?
86
86
  response = @client.send_request(
87
87
  method: 'DELETE',
88
- url: PIPELINES_URL + pipeline_id
88
+ path: pipelines_path(pipeline_id)
89
89
  )
90
90
  logger.info("Deleting automation with id #{pipeline_id}")
91
91
  response
@@ -102,4 +102,4 @@ module Urbanairship
102
102
  end
103
103
  end
104
104
  end
105
- end
105
+ end
@@ -13,11 +13,15 @@ module Urbanairship
13
13
  #
14
14
  # @param [Object] key Application Key
15
15
  # @param [Object] secret Application Secret
16
+ # @param [String] server Airship server to use ("go.airship.eu" or "go.urbanairship.com").
17
+ # Used only when the request is sent with a "path", not an "url".
16
18
  # @param [String] token Application Auth Token (for custom events endpoint)
17
19
  # @return [Object] Client
18
- def initialize(key: required('key'), secret: required('secret'), token: nil)
20
+ def initialize(key: required('key'), secret: required('secret'),
21
+ server: Urbanairship.configuration.server, token: nil)
19
22
  @key = key
20
23
  @secret = secret
24
+ @server = server
21
25
  @token = token
22
26
  end
23
27
 
@@ -25,12 +29,13 @@ module Urbanairship
25
29
  #
26
30
  # @param [Object] method HTTP Method
27
31
  # @param [Object] body Request Body
32
+ # @param [Object] path Request path
28
33
  # @param [Object] url Request URL
29
34
  # @param [Object] content_type Content-Type
30
35
  # @param [Object] encoding Encoding
31
36
  # @param [Symbol] auth_type (:basic|:bearer)
32
37
  # @return [Object] Push Response
33
- def send_request(method: required('method'), url: required('url'), body: nil,
38
+ def send_request(method: required('method'), path: nil, url: nil, body: nil,
34
39
  content_type: nil, encoding: nil, auth_type: :basic)
35
40
  req_type = case method
36
41
  when 'GET'
@@ -45,17 +50,21 @@ module Urbanairship
45
50
  fail 'Method was not "GET" "POST" "PUT" or "DELETE"'
46
51
  end
47
52
 
48
- headers = {'User-agent' => 'UARubyLib/' + Urbanairship::VERSION}
53
+ raise ArgumentError.new("path and url can't be both nil") if path.nil? && url.nil?
54
+
55
+ headers = {'User-Agent' => 'UARubyLib/' + Urbanairship::VERSION + ' ' + @key}
49
56
  headers['Accept'] = 'application/vnd.urbanairship+json; version=3'
50
- headers['Content-type'] = content_type unless content_type.nil?
57
+ headers['Content-Type'] = content_type unless content_type.nil?
51
58
  headers['Content-Encoding'] = encoding unless encoding.nil?
52
-
59
+
53
60
  if auth_type == :bearer
54
61
  raise ArgumentError.new('token must be provided as argument if auth_type=bearer') if @token.nil?
55
62
  headers['X-UA-Appkey'] = @key
56
63
  headers['Authorization'] = "Bearer #{@token}"
57
64
  end
58
65
 
66
+ url = "https://#{@server}/api#{path}" unless path.nil?
67
+
59
68
  debug = "Making #{method} request to #{url}.\n"+ "\tHeaders:\n"
60
69
  debug += "\t\tcontent-type: #{content_type}\n" unless content_type.nil?
61
70
  debug += "\t\tcontent-encoding: gzip\n" unless encoding.nil?