urbanairship 7.0.0 → 9.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/.github/PULL_REQUEST_TEMPLATE.md +2 -2
- data/.github/workflows/ci.yaml +23 -0
- data/.github/workflows/release.yaml +31 -0
- data/.gitignore +1 -0
- data/CHANGELOG +19 -0
- data/README.rst +11 -12
- data/docs/attributes.rst +21 -0
- data/docs/examples.rst +2 -2
- data/docs/index.rst +3 -3
- data/docs/named_user.rst +22 -0
- data/docs/push.rst +1 -7
- data/docs/tag_lists.rst +76 -0
- data/example/pusher.rb +3 -7
- data/lib/urbanairship/client.rb +2 -2
- data/lib/urbanairship/common.rb +6 -4
- data/lib/urbanairship/devices/attributes.rb +53 -0
- data/lib/urbanairship/devices/named_user.rb +20 -10
- data/lib/urbanairship/devices/tag_lists.rb +82 -0
- data/lib/urbanairship/push/audience.rb +0 -61
- data/lib/urbanairship/version.rb +1 -1
- data/lib/urbanairship.rb +3 -1
- data/urbanairship.gemspec +1 -0
- metadata +25 -9
- data/.travis.yml +0 -4
- data/docs/location.rst +0 -127
- data/lib/urbanairship/push/location.rb +0 -103
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5417adc316435f2d47f4962983571399b1bf4dea0015cd126ea12077260e50eb
|
4
|
+
data.tar.gz: ccbaafa7f7f6bb5820c3a9e1834c23b5a8972debc6b964a204a73cb7630dc2b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36063a93db8505fa64180ef1980068112d3e14b6b0330e97fa772bd7081c25ab0500aaa7db442ba086a7b12ae8e2c588bbdce7f34144998287a242e401c49c6c
|
7
|
+
data.tar.gz: d0cccf9b2713aa344d268c8a997a549525166f88e98e78d63b2a16a12e4123ce999e9be430c0c63a167cf5ff09505cc846755fc02ec822504b898146389aa799
|
@@ -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.
|
19
|
-
- [ ] 2.3
|
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
|
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Ruby Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
release:
|
5
|
+
types: [released]
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
test:
|
9
|
+
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: [2.7.3, 2.6.7]
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
19
|
+
uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
- name: Install dependencies
|
23
|
+
run: bundle install
|
24
|
+
- name: Run tests
|
25
|
+
run: bundle exec rake
|
26
|
+
- name: Publish to RubyGems
|
27
|
+
uses: cadwallion/publish-rubygems-action@master
|
28
|
+
env:
|
29
|
+
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
|
30
|
+
GUTHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
31
|
+
RELEASE_COMMAND: rake release
|
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
9.0.0
|
2
|
+
--------------------
|
3
|
+
- Adds Tag List API Support
|
4
|
+
- Removes location lookup endpoints
|
5
|
+
- Removes location-based audience selectors
|
6
|
+
--------------------
|
7
|
+
8.0.1
|
8
|
+
--------------------
|
9
|
+
- Adds app key to user agent string on request
|
10
|
+
|
11
|
+
--------------------
|
12
|
+
8.0.0
|
13
|
+
--------------------
|
14
|
+
- Updates officially supported versions to 2.6.7 and 2.7.2
|
15
|
+
- Fixes headers to reduce warning messages
|
16
|
+
- Fixes for multiple mis-set named user urls
|
17
|
+
- Fix to automatically convert an integer named user to a string so it can be successfully submitted
|
18
|
+
- Adds attribute support for named users
|
19
|
+
|
1
20
|
--------------------
|
2
21
|
7.0.0
|
3
22
|
--------------------
|
data/README.rst
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
.. image:: https://
|
2
|
-
:target: https://
|
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.
|
18
|
-
2.
|
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
|
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
|
@@ -120,7 +119,7 @@ Broadcast to All Devices
|
|
120
119
|
p = airship.create_push
|
121
120
|
p.audience = UA.all
|
122
121
|
p.notification = UA.notification(alert: 'Hello')
|
123
|
-
p.device_types = UA.
|
122
|
+
p.device_types = UA.device_types(['ios','android'])
|
124
123
|
p.send_push
|
125
124
|
|
126
125
|
Simple Tag Push
|
@@ -136,12 +135,12 @@ Simple Tag Push
|
|
136
135
|
p = airship.create_push
|
137
136
|
p.audience = UA.tag('some_tag')
|
138
137
|
p.notification = UA.notification(alert: 'Hello')
|
139
|
-
p.device_types = UA.
|
138
|
+
p.device_types = UA.device_types(['ios','android'])
|
140
139
|
p.send_push
|
141
140
|
|
142
141
|
Specify the Airship server used to make your requests
|
143
142
|
-----------------------------------------------------
|
144
|
-
By default, the request will be sent to the 'go.
|
143
|
+
By default, the request will be sent to the 'go.urbanairship.com' server:
|
145
144
|
|
146
145
|
.. code-block:: ruby
|
147
146
|
|
@@ -172,9 +171,9 @@ Finally, you can change the targeted server on a request basis:
|
|
172
171
|
config.server = 'go.airship.eu'
|
173
172
|
end
|
174
173
|
|
175
|
-
Urbanairship::Client.new(key:'application_key', secret:'master_secret', server: 'go.
|
174
|
+
Urbanairship::Client.new(key:'application_key', secret:'master_secret', server: 'go.urbanairship.com')
|
176
175
|
# The Urbanairship configuration is overridden by the client and the
|
177
|
-
# request will be sent to the 'go.
|
176
|
+
# request will be sent to the 'go.urbanairship.com' server
|
178
177
|
|
179
178
|
Contributing
|
180
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/examples.rst
CHANGED
@@ -18,7 +18,7 @@ Simple broadcast to all devices
|
|
18
18
|
push = airship.create_push
|
19
19
|
push.audience = UA.all
|
20
20
|
push.notification = UA.notification(alert: "Hello, world!")
|
21
|
-
push.device_types = UA.
|
21
|
+
push.device_types = UA.device_types(['ios','android'])
|
22
22
|
push.send_push
|
23
23
|
|
24
24
|
|
@@ -92,7 +92,7 @@ Rich Push with extra and without notification
|
|
92
92
|
|
93
93
|
push = airship.create_push
|
94
94
|
push.audience = UA.all
|
95
|
-
push.device_types = UA.
|
95
|
+
push.device_types = UA.device_types(['ios','android'])
|
96
96
|
push.message = UA.message(
|
97
97
|
title: "Your package is on its way!",
|
98
98
|
body: "<h1>Would you please complete our customer survey?</h1>",
|
data/docs/index.rst
CHANGED
@@ -27,7 +27,7 @@ Using the library
|
|
27
27
|
|
28
28
|
The library is intended to be used with the small footprint of a single
|
29
29
|
import. To get started, import the package, and create an
|
30
|
-
:rb:class:`Airship` object representing a single
|
30
|
+
:rb:class:`Airship` object representing a single Airship project.
|
31
31
|
|
32
32
|
Note that channels are preferred over ``device_token`` and ``apid``. See:
|
33
33
|
`documentation on channels <channels>`_.
|
@@ -40,7 +40,7 @@ Note that channels are preferred over ``device_token`` and ``apid``. See:
|
|
40
40
|
p = airship.create_push
|
41
41
|
p.audience = UA.all
|
42
42
|
p.notification = UA.notification(alert: 'Hello')
|
43
|
-
p.device_types = UA.
|
43
|
+
p.device_types = UA.device_types(['ios','android'])
|
44
44
|
p.send_push
|
45
45
|
|
46
46
|
The library uses `unirest`_ for communication with the UA API.
|
@@ -66,7 +66,7 @@ Contents:
|
|
66
66
|
named_user.rst
|
67
67
|
reports.rst
|
68
68
|
static_lists.rst
|
69
|
-
|
69
|
+
tag_lists.rst
|
70
70
|
exceptions.rst
|
71
71
|
examples.rst
|
72
72
|
create_and_send.rst
|
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'.
|
data/docs/push.rst
CHANGED
@@ -22,7 +22,7 @@ and device types:
|
|
22
22
|
push = airship.create_push
|
23
23
|
push.audience = UA.all
|
24
24
|
push.notification = UA.notification(alert: 'Hello')
|
25
|
-
push.device_types = UA.
|
25
|
+
push.device_types = UA.device_types(['ios','android'])
|
26
26
|
push.send_push
|
27
27
|
|
28
28
|
|
@@ -443,12 +443,6 @@ types you wish to target with a list of strings:
|
|
443
443
|
|
444
444
|
push.device_types = UA.device_types(['ios', 'android', 'web', 'open::example'])
|
445
445
|
|
446
|
-
or with the ``all`` shortcut.
|
447
|
-
|
448
|
-
.. code-block:: ruby
|
449
|
-
|
450
|
-
push.device_types = UA.all
|
451
|
-
|
452
446
|
|
453
447
|
Delivery
|
454
448
|
--------
|
data/docs/tag_lists.rst
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
Tag Lists
|
2
|
+
=========
|
3
|
+
|
4
|
+
Bulk add and/or remove tags by uploading a CSV file of Airship users. For more
|
5
|
+
information about the use of this endpoint, incluiding CSV file formatting requirements
|
6
|
+
please see `the Airship Tag Lists API documentation
|
7
|
+
<https://docs.airship.com/api/ua/#tag-tag-lists>`__
|
8
|
+
|
9
|
+
|
10
|
+
Create List
|
11
|
+
-----------
|
12
|
+
|
13
|
+
Add tags to your contacts by creating a list and uploading CSV file with user identifiers.
|
14
|
+
The body of the request contains the name, description, and optional metadata for the
|
15
|
+
list. After you define a list, you populate it with a call to the Upload Tag List method.
|
16
|
+
|
17
|
+
.. code-block:: ruby
|
18
|
+
|
19
|
+
require 'urbanairship'
|
20
|
+
UA = Urbanairship
|
21
|
+
airship = UA::Client.new(key: 'app_key', secret: 'master_secret')
|
22
|
+
tags = {'tag_group_name': ['tag1', 'tag2']}
|
23
|
+
|
24
|
+
tag_list = UA::TagList.new(client: airship)
|
25
|
+
tag_list.name = 'ua_tags_list_name'
|
26
|
+
tag_list.create(description: 'description', extra: {'key': 'value'}, add: tags)
|
27
|
+
|
28
|
+
|
29
|
+
Upload List
|
30
|
+
-----------
|
31
|
+
|
32
|
+
Upload a CSV that will set tag values on the specified channels or named users. See `the
|
33
|
+
Airship API documentation <https://docs.airship.com/api/ua/#operation-api-tag-lists-list_name-csv-put>`__ for CSV formatting requirements. Set
|
34
|
+
the optional `gzip` parameter to `true` if your file is gzip compressed.
|
35
|
+
|
36
|
+
.. code-block:: ruby
|
37
|
+
|
38
|
+
require 'urbanairship'
|
39
|
+
UA = Urbanairship
|
40
|
+
airship = UA::Client.new(key: 'app_key', secret: 'master_secret')
|
41
|
+
|
42
|
+
tag_list = UA::TagList.new(client: airship)
|
43
|
+
tag_list.name = 'ua_tags_list_name'
|
44
|
+
tag_list.upload(csv_file: 'file_content', gzip: true)
|
45
|
+
|
46
|
+
|
47
|
+
Dowload List Errors
|
48
|
+
-------------------
|
49
|
+
|
50
|
+
During processing, after a list is uploaded, errors can occur. Depending on the type
|
51
|
+
of list processing, an error file may be created, showing a user exactly what went wrong.
|
52
|
+
|
53
|
+
.. code-block:: ruby
|
54
|
+
|
55
|
+
require 'urbanairship'
|
56
|
+
UA = Urbanairship
|
57
|
+
airship = UA::Client.new(key: 'app_key', secret: 'master_secret')
|
58
|
+
|
59
|
+
tag_list = UA::TagList.new(client: airship)
|
60
|
+
error_csv = tag_list.errors
|
61
|
+
|
62
|
+
|
63
|
+
Retrieve All Tag Lists
|
64
|
+
----------------------
|
65
|
+
|
66
|
+
Retrieve information about all tag lists. This call returns a list of metadata that
|
67
|
+
will not contain the actual lists of users.
|
68
|
+
|
69
|
+
.. code-block:: ruby
|
70
|
+
|
71
|
+
require 'urbanairship'
|
72
|
+
UA = Urbanairship
|
73
|
+
airship = UA::Client.new(key: 'app_key', secret: 'master_secret')
|
74
|
+
|
75
|
+
tag_list = UA::TagList.new(client: airship)
|
76
|
+
list_response = tag_list.list
|
data/example/pusher.rb
CHANGED
@@ -3,19 +3,15 @@ class Pusher
|
|
3
3
|
require 'urbanairship'
|
4
4
|
UA = Urbanairship
|
5
5
|
|
6
|
-
def
|
6
|
+
def send_broadcast_message
|
7
7
|
airship = UA::Client.new(key:'app_key', secret:'master_secret')
|
8
8
|
p = airship.create_push
|
9
9
|
p.audience = UA.all
|
10
10
|
p.notification = UA.notification(alert: 'Hello')
|
11
|
-
p.device_types = UA.
|
12
|
-
p.in_app = UA.in_app(
|
13
|
-
alert: 'This is a test message!',
|
14
|
-
display_type: 'banner'
|
15
|
-
)
|
11
|
+
p.device_types = UA.device_types(['ios','android'])
|
16
12
|
p.send_push
|
17
13
|
end
|
18
14
|
|
19
15
|
end
|
20
16
|
|
21
|
-
Pusher.new.
|
17
|
+
Pusher.new.send_broadcast_message
|
data/lib/urbanairship/client.rb
CHANGED
@@ -52,9 +52,9 @@ module Urbanairship
|
|
52
52
|
|
53
53
|
raise ArgumentError.new("path and url can't be both nil") if path.nil? && url.nil?
|
54
54
|
|
55
|
-
headers = {'User-
|
55
|
+
headers = {'User-Agent' => 'UARubyLib/' + Urbanairship::VERSION + ' ' + @key}
|
56
56
|
headers['Accept'] = 'application/vnd.urbanairship+json; version=3'
|
57
|
-
headers['Content-
|
57
|
+
headers['Content-Type'] = content_type unless content_type.nil?
|
58
58
|
headers['Content-Encoding'] = encoding unless encoding.nil?
|
59
59
|
|
60
60
|
if auth_type == :bearer
|
data/lib/urbanairship/common.rb
CHANGED
@@ -4,6 +4,8 @@ require 'urbanairship/loggable'
|
|
4
4
|
module Urbanairship
|
5
5
|
# Features mixed in to all classes
|
6
6
|
module Common
|
7
|
+
CONTENT_TYPE = 'application/json'
|
8
|
+
|
7
9
|
def apid_path(path='')
|
8
10
|
"/apids/#{path}"
|
9
11
|
end
|
@@ -32,10 +34,6 @@ module Urbanairship
|
|
32
34
|
"/lists/#{path}"
|
33
35
|
end
|
34
36
|
|
35
|
-
def location_path(path='')
|
36
|
-
"/location/#{path}"
|
37
|
-
end
|
38
|
-
|
39
37
|
def named_users_path(path='')
|
40
38
|
"/named_users/#{path}"
|
41
39
|
end
|
@@ -64,6 +62,10 @@ module Urbanairship
|
|
64
62
|
"/segments/#{path}"
|
65
63
|
end
|
66
64
|
|
65
|
+
def tag_lists_path(path='')
|
66
|
+
"/tag-lists/#{path}"
|
67
|
+
end
|
68
|
+
|
67
69
|
# Helper method for required keyword args in Ruby 2.0 that is compatible with 2.1+
|
68
70
|
# @example
|
69
71
|
# def say(greeting: required('greeting'))
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
module Urbanairship
|
3
|
+
module Devices
|
4
|
+
class Attributes
|
5
|
+
|
6
|
+
SET = 'set'
|
7
|
+
REMOVE = 'remove'
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
@attributes = attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
def payload
|
14
|
+
@payload ||= { attributes: attributes_list }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def attributes_list
|
20
|
+
@attributes.map{ |attribute| attribute_payload(attribute) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def attribute_payload(attribute)
|
24
|
+
if REMOVE == attribute[:action]
|
25
|
+
remove_payload(attribute)
|
26
|
+
else
|
27
|
+
set_payload(attribute)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_payload(attribute)
|
32
|
+
{
|
33
|
+
action: SET,
|
34
|
+
key: attribute[:key],
|
35
|
+
value: attribute[:value],
|
36
|
+
timestamp: (attribute[:timestamp] || timestamp).iso8601,
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def remove_payload(attribute)
|
41
|
+
{
|
42
|
+
action: REMOVE,
|
43
|
+
key: attribute[:key],
|
44
|
+
timestamp: (attribute[:timestamp] || timestamp).iso8601,
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def timestamp
|
49
|
+
@timestamp ||= Time.now.utc
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'urbanairship'
|
2
2
|
|
3
|
-
|
4
3
|
module Urbanairship
|
5
4
|
module Devices
|
6
5
|
class NamedUser
|
@@ -13,6 +12,17 @@ module Urbanairship
|
|
13
12
|
@named_user_id = nil
|
14
13
|
end
|
15
14
|
|
15
|
+
def update_attributes(attributes: required('attributes'))
|
16
|
+
response = @client.send_request(
|
17
|
+
method: 'POST',
|
18
|
+
body: Urbanairship::Attributes.new(attributes).payload.to_json,
|
19
|
+
path: named_users_path("#{@named_user_id}/attributes"),
|
20
|
+
content_type: CONTENT_TYPE,
|
21
|
+
)
|
22
|
+
logger.info { "Updated attributes for named_user #{@named_user_id}" }
|
23
|
+
response
|
24
|
+
end
|
25
|
+
|
16
26
|
def associate(channel_id: required('channel_id'), device_type: nil)
|
17
27
|
fail ArgumentError,
|
18
28
|
'named_user_id is required for association' if @named_user_id.nil?
|
@@ -20,13 +30,13 @@ module Urbanairship
|
|
20
30
|
payload = {}
|
21
31
|
payload['channel_id'] = channel_id
|
22
32
|
payload['device_type'] = device_type unless device_type.nil?
|
23
|
-
payload['named_user_id'] = @named_user_id
|
33
|
+
payload['named_user_id'] = @named_user_id.to_s
|
24
34
|
|
25
35
|
response = @client.send_request(
|
26
36
|
method: 'POST',
|
27
37
|
body: JSON.dump(payload),
|
28
|
-
path: named_users_path('
|
29
|
-
content_type:
|
38
|
+
path: named_users_path('associate'),
|
39
|
+
content_type: CONTENT_TYPE
|
30
40
|
)
|
31
41
|
logger.info { "Associated channel_id #{channel_id} with named_user #{@named_user_id}" }
|
32
42
|
response
|
@@ -40,8 +50,8 @@ module Urbanairship
|
|
40
50
|
response = @client.send_request(
|
41
51
|
method: 'POST',
|
42
52
|
body: JSON.dump(payload),
|
43
|
-
path: named_users_path('
|
44
|
-
content_type:
|
53
|
+
path: named_users_path('disassociate'),
|
54
|
+
content_type: CONTENT_TYPE
|
45
55
|
)
|
46
56
|
logger.info { "Dissociated channel_id #{channel_id}" }
|
47
57
|
response
|
@@ -51,8 +61,8 @@ module Urbanairship
|
|
51
61
|
fail ArgumentError,
|
52
62
|
'named_user_id is required for lookup' if @named_user_id.nil?
|
53
63
|
response = @client.send_request(
|
54
|
-
|
55
|
-
|
64
|
+
method: 'GET',
|
65
|
+
path: named_users_path('?id=' + @named_user_id),
|
56
66
|
)
|
57
67
|
logger.info { "Retrieved information on named_user_id #{@named_user_id}" }
|
58
68
|
response
|
@@ -101,8 +111,8 @@ module Urbanairship
|
|
101
111
|
response = @client.send_request(
|
102
112
|
method: 'POST',
|
103
113
|
body: JSON.dump(payload),
|
104
|
-
path: named_users_path('
|
105
|
-
content_type:
|
114
|
+
path: named_users_path('uninstall'),
|
115
|
+
content_type: CONTENT_TYPE
|
106
116
|
)
|
107
117
|
logger.info { "Uninstalled named_user_ids #{@named_user_ids} " }
|
108
118
|
response
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'urbanairship'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module Urbanairship
|
5
|
+
module Devices
|
6
|
+
class TagList
|
7
|
+
include Urbanairship::Common
|
8
|
+
include Urbanairship::Loggable
|
9
|
+
attr_accessor :name
|
10
|
+
|
11
|
+
def initialize(client: required('client'))
|
12
|
+
fail ArgumentError, 'Client cannot be set to nil' if client.nil?
|
13
|
+
@client = client
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(description: nil, extra: nil, add:nil, remove: nil, set: nil)
|
17
|
+
fail ArgumentError, 'Name must be set' if name.nil?
|
18
|
+
payload = {'name': name}
|
19
|
+
payload['description'] = description unless description.nil?
|
20
|
+
payload['extra'] = extra unless extra.nil?
|
21
|
+
payload['add'] = add unless add.nil?
|
22
|
+
payload['remove'] = remove unless remove.nil?
|
23
|
+
payload['set'] = set unless set.nil?
|
24
|
+
|
25
|
+
response = @client.send_request(
|
26
|
+
method: 'POST',
|
27
|
+
body: JSON.dump(payload),
|
28
|
+
path: tag_lists_path,
|
29
|
+
content_type: 'application/json'
|
30
|
+
)
|
31
|
+
logger.info("Created Tag List for #{@name}")
|
32
|
+
response
|
33
|
+
end
|
34
|
+
|
35
|
+
def upload(csv_file: required('csv_file'), gzip: false)
|
36
|
+
fail ArgumentError, 'Name must be set' if name.nil?
|
37
|
+
|
38
|
+
if gzip
|
39
|
+
response = @client.send_request(
|
40
|
+
method: 'PUT',
|
41
|
+
body: csv_file,
|
42
|
+
path: tag_lists_path(@name + '/csv/'),
|
43
|
+
content_type: 'text/csv',
|
44
|
+
encoding: gzip
|
45
|
+
)
|
46
|
+
else
|
47
|
+
response = @client.send_request(
|
48
|
+
method: 'PUT',
|
49
|
+
body: csv_file,
|
50
|
+
path: tag_lists_path(@name + '/csv/'),
|
51
|
+
content_type: 'text/csv'
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
logger.info("Uploaded a tag list for #{@name}")
|
56
|
+
response
|
57
|
+
end
|
58
|
+
|
59
|
+
def errors
|
60
|
+
fail ArgumentError, 'Name must be set' if name.nil?
|
61
|
+
|
62
|
+
response = @client.send_request(
|
63
|
+
method: 'GET',
|
64
|
+
path: tag_lists_path(@name + '/errors/')
|
65
|
+
)
|
66
|
+
logger.info("Got error CSV for tag list #{@name}")
|
67
|
+
response
|
68
|
+
end
|
69
|
+
|
70
|
+
def list
|
71
|
+
fail ArgumentError, 'Name must be set' if name.nil?
|
72
|
+
|
73
|
+
response = @client.send_request(
|
74
|
+
method: 'GET',
|
75
|
+
path: tag_lists_path
|
76
|
+
)
|
77
|
+
logger.info("Got tag lists listing")
|
78
|
+
response
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -78,67 +78,6 @@ module Urbanairship
|
|
78
78
|
{ not: child }
|
79
79
|
end
|
80
80
|
|
81
|
-
# Select a recent date range for a location selector.
|
82
|
-
# Valid selectors are:
|
83
|
-
# :minutes :hours :days :weeks :months :years
|
84
|
-
#
|
85
|
-
# @example
|
86
|
-
# recent_date(months: 6) # => { recent: { months: 6 }}
|
87
|
-
# recent_date(weeks: 3) # => { recent: { weeks: 3 }}
|
88
|
-
def recent_date(**params)
|
89
|
-
fail ArgumentError, 'Only one range allowed' if params.size != 1
|
90
|
-
k, v = params.first
|
91
|
-
unless DATE_TERMS.include?(k)
|
92
|
-
fail ArgumentError, "#{k} not in #{DATE_TERMS}"
|
93
|
-
end
|
94
|
-
{ recent: { k => v } }
|
95
|
-
end
|
96
|
-
|
97
|
-
# Select an absolute date range for a location selector.
|
98
|
-
#
|
99
|
-
# @param resolution [Symbol] Time resolution specifier, one of
|
100
|
-
# :minutes :hours :days :weeks :months :years
|
101
|
-
# @param start [String] UTC start time in ISO 8601 format.
|
102
|
-
# @param the_end [String] UTC end time in ISO 8601 format.
|
103
|
-
#
|
104
|
-
# @example
|
105
|
-
# absolute_date(resolution: :months, start: '2013-01', the_end: '2013-06')
|
106
|
-
# #=> {months: {end: '2013-06', start: '2013-01'}}
|
107
|
-
#
|
108
|
-
# absolute_date(resolution: :minutes, start: '2012-01-01 12:00',
|
109
|
-
# the_end: '2012-01-01 12:45')
|
110
|
-
# #=> {minutes: {end: '2012-01-01 12:45', start: '2012-01-01 12:00'}}
|
111
|
-
def absolute_date(resolution: required('resolution'), start: required('start'), the_end: required('the_end'))
|
112
|
-
unless DATE_TERMS.include?(resolution)
|
113
|
-
fail ArgumentError, "#{resolution} not in #{DATE_TERMS}"
|
114
|
-
end
|
115
|
-
{ resolution => { start: start, end: the_end } }
|
116
|
-
end
|
117
|
-
|
118
|
-
# Select a location expression.
|
119
|
-
#
|
120
|
-
# Location selectors are made up of either an id or an alias and a date
|
121
|
-
# period specifier. Use a date specification function to generate the time
|
122
|
-
# period specifier.
|
123
|
-
#
|
124
|
-
# @example ID location
|
125
|
-
# location(id: '4oFkxX7RcUdirjtaenEQIV', date: recent_date(days: 4))
|
126
|
-
# #=> {location: {date: {recent: {days: 4}},
|
127
|
-
# id: '4oFkxX7RcUdirjtaenEQIV'}}
|
128
|
-
#
|
129
|
-
# @example Alias location
|
130
|
-
# location(us_zip: '94103', date: absolute_date(
|
131
|
-
# resolution: 'days', start: '2012-01-01', end: '2012-01-15'))
|
132
|
-
# #=> {location: {date: {days: {end: '2012-01-15',
|
133
|
-
# start: '2012-01-01'}}, us_zip: '94103'}}
|
134
|
-
def location(date: required('date'), **params)
|
135
|
-
unless params.size == 1
|
136
|
-
fail ArgumentError, 'One location specifier required'
|
137
|
-
end
|
138
|
-
params[:date] = date
|
139
|
-
{ location: params }
|
140
|
-
end
|
141
|
-
|
142
81
|
private
|
143
82
|
|
144
83
|
# Clean up a UUID for use in the library
|
data/lib/urbanairship/version.rb
CHANGED
data/lib/urbanairship.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'urbanairship/custom_events/custom_event'
|
1
2
|
require 'urbanairship/custom_events/payload'
|
2
3
|
require 'urbanairship/push/audience'
|
3
4
|
require 'urbanairship/push/payload'
|
@@ -12,6 +13,7 @@ require 'urbanairship/devices/sms_notification'
|
|
12
13
|
require 'urbanairship/devices/mms_notification'
|
13
14
|
require 'urbanairship/devices/create_and_send'
|
14
15
|
require 'urbanairship/devices/attribute'
|
16
|
+
require 'urbanairship/devices/attributes'
|
15
17
|
require 'urbanairship/client'
|
16
18
|
require 'urbanairship/common'
|
17
19
|
require 'urbanairship/configuration'
|
@@ -24,7 +26,7 @@ require 'urbanairship/devices/named_user'
|
|
24
26
|
require 'urbanairship/devices/open_channel'
|
25
27
|
require 'urbanairship/reports/response_statistics'
|
26
28
|
require 'urbanairship/devices/static_lists'
|
27
|
-
require 'urbanairship/
|
29
|
+
require 'urbanairship/devices/tag_lists'
|
28
30
|
require 'urbanairship/automations/pipeline'
|
29
31
|
require 'urbanairship/automations/automation'
|
30
32
|
require 'urbanairship/ab_tests/variant'
|
data/urbanairship.gemspec
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: 9.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: 2022-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -114,6 +114,20 @@ dependencies:
|
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '1'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: timecop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
117
131
|
description: A Ruby Library for using the Airship web service API for push notifications
|
118
132
|
and rich app pages.
|
119
133
|
email:
|
@@ -126,9 +140,10 @@ files:
|
|
126
140
|
- ".github/ISSUE_TEMPLATE.md"
|
127
141
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
128
142
|
- ".github/SUPPORT.md"
|
143
|
+
- ".github/workflows/ci.yaml"
|
144
|
+
- ".github/workflows/release.yaml"
|
129
145
|
- ".gitignore"
|
130
146
|
- ".rspec"
|
131
|
-
- ".travis.yml"
|
132
147
|
- CHANGELOG
|
133
148
|
- Gemfile
|
134
149
|
- Guardfile
|
@@ -149,7 +164,6 @@ files:
|
|
149
164
|
- docs/examples.rst
|
150
165
|
- docs/exceptions.rst
|
151
166
|
- docs/index.rst
|
152
|
-
- docs/location.rst
|
153
167
|
- docs/named_user.rst
|
154
168
|
- docs/open_channels.rst
|
155
169
|
- docs/push.rst
|
@@ -157,6 +171,7 @@ files:
|
|
157
171
|
- docs/segment.rst
|
158
172
|
- docs/sms.rst
|
159
173
|
- docs/static_lists.rst
|
174
|
+
- docs/tag_lists.rst
|
160
175
|
- docs/tags.rst
|
161
176
|
- example/pusher.rb
|
162
177
|
- lib/urbanairship.rb
|
@@ -171,6 +186,7 @@ files:
|
|
171
186
|
- lib/urbanairship/custom_events/custom_event.rb
|
172
187
|
- lib/urbanairship/custom_events/payload.rb
|
173
188
|
- lib/urbanairship/devices/attribute.rb
|
189
|
+
- lib/urbanairship/devices/attributes.rb
|
174
190
|
- lib/urbanairship/devices/channel_tags.rb
|
175
191
|
- lib/urbanairship/devices/channel_uninstall.rb
|
176
192
|
- lib/urbanairship/devices/create_and_send.rb
|
@@ -184,9 +200,9 @@ files:
|
|
184
200
|
- lib/urbanairship/devices/sms.rb
|
185
201
|
- lib/urbanairship/devices/sms_notification.rb
|
186
202
|
- lib/urbanairship/devices/static_lists.rb
|
203
|
+
- lib/urbanairship/devices/tag_lists.rb
|
187
204
|
- lib/urbanairship/loggable.rb
|
188
205
|
- lib/urbanairship/push/audience.rb
|
189
|
-
- lib/urbanairship/push/location.rb
|
190
206
|
- lib/urbanairship/push/payload.rb
|
191
207
|
- lib/urbanairship/push/push.rb
|
192
208
|
- lib/urbanairship/push/schedule.rb
|
@@ -199,7 +215,7 @@ licenses:
|
|
199
215
|
- Apache-2.0
|
200
216
|
metadata:
|
201
217
|
allowed_push_host: https://rubygems.org
|
202
|
-
post_install_message:
|
218
|
+
post_install_message:
|
203
219
|
rdoc_options: []
|
204
220
|
require_paths:
|
205
221
|
- lib
|
@@ -214,8 +230,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
230
|
- !ruby/object:Gem::Version
|
215
231
|
version: '0'
|
216
232
|
requirements: []
|
217
|
-
rubygems_version: 3.0.1
|
218
|
-
signing_key:
|
233
|
+
rubygems_version: 3.0.3.1
|
234
|
+
signing_key:
|
219
235
|
specification_version: 4
|
220
236
|
summary: Ruby Gem for using the Airship API
|
221
237
|
test_files: []
|
data/.travis.yml
DELETED
data/docs/location.rst
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
Locations
|
2
|
-
=========
|
3
|
-
|
4
|
-
This class allows you to search for location information in
|
5
|
-
various ways.
|
6
|
-
|
7
|
-
|
8
|
-
Name Lookup
|
9
|
-
-----------
|
10
|
-
|
11
|
-
Search for a location boundary by name. The search primarily
|
12
|
-
uses the location names, but you can also filter the results
|
13
|
-
by boundary type. See `the API documentation on location
|
14
|
-
<http://docs.airship.com/api/ua.html#location>`_
|
15
|
-
for more information.
|
16
|
-
|
17
|
-
.. code-block:: ruby
|
18
|
-
|
19
|
-
require 'urbanairship'
|
20
|
-
UA = Urbanairship
|
21
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
22
|
-
location = UA::Location.new(client: airship)
|
23
|
-
location.name_lookup(name: 'name', type: 'type')
|
24
|
-
|
25
|
-
.. note::
|
26
|
-
|
27
|
-
``name`` is a required parameter, but ``type`` is optional
|
28
|
-
|
29
|
-
|
30
|
-
Coordinates Lookup
|
31
|
-
------------------
|
32
|
-
|
33
|
-
Search for a location by latitude and longitude coordinates. Type is
|
34
|
-
an optional parameter. See `the API documentation on coordinates lookup
|
35
|
-
<http://docs.airship.com/api/ua.html#lat-long-lookup>`_
|
36
|
-
for more information.
|
37
|
-
|
38
|
-
.. code-block:: ruby
|
39
|
-
|
40
|
-
require 'urbanairship'
|
41
|
-
UA = Urbanairship
|
42
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
43
|
-
location = UA::Location.new(client: airship)
|
44
|
-
location.coordinates_lookup(latitude: 123.45, longitude: 123.45, type: 'type')
|
45
|
-
|
46
|
-
.. note::
|
47
|
-
|
48
|
-
``longitude`` and ``latitude`` are required parameters that must be numbers.
|
49
|
-
``Type`` is an optional parameter.
|
50
|
-
|
51
|
-
|
52
|
-
Bounding Box Lookup
|
53
|
-
-------------------
|
54
|
-
|
55
|
-
Search for location using a bounding box. See `the documentation on
|
56
|
-
bounding box lookup
|
57
|
-
<http://docs.airship.com/api/ua.html#bounding-box-lookup>`_
|
58
|
-
for more information.
|
59
|
-
|
60
|
-
.. code-block:: ruby
|
61
|
-
|
62
|
-
require 'urbanairship'
|
63
|
-
UA = Urbanairship
|
64
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
65
|
-
location = UA::Location.new(client: airship)
|
66
|
-
location.bounding_box_lookup(lat1: 123.45, long1: 123.45,
|
67
|
-
lat2: 321.45, long2: 321.45, type: 'type')
|
68
|
-
|
69
|
-
.. note::
|
70
|
-
|
71
|
-
``lat1``, ``long1``, ``lat2``, and ``long2`` and are required parameters that must be numbers.
|
72
|
-
``Type`` is an optional parameter.
|
73
|
-
|
74
|
-
|
75
|
-
Alias Lookup
|
76
|
-
------------
|
77
|
-
|
78
|
-
Search for location by alias. See `the documentation on alias lookup
|
79
|
-
<http://docs.airship.com/api/ua.html#alias-lookup>`_
|
80
|
-
|
81
|
-
.. code-block:: ruby
|
82
|
-
|
83
|
-
require 'urbanairship'
|
84
|
-
UA = Urbanairship
|
85
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
86
|
-
location = UA::Location.new(client: airship)
|
87
|
-
location.alias_lookup(from_alias: 'us_state=CA')
|
88
|
-
|
89
|
-
.. note::
|
90
|
-
|
91
|
-
``from_alias`` can either be a single alias or an array of aliases.
|
92
|
-
|
93
|
-
|
94
|
-
Polygon Lookup
|
95
|
-
--------------
|
96
|
-
|
97
|
-
Search for location by polygon id. See `the documentation on polygon
|
98
|
-
lookup <http://docs.airship.com/api/ua.html#polygon-lookup>`_
|
99
|
-
for more information.
|
100
|
-
|
101
|
-
.. code-block:: ruby
|
102
|
-
|
103
|
-
require 'urbanairship'
|
104
|
-
UA = Urbanairship
|
105
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
106
|
-
location = UA::Location.new(client: airship)
|
107
|
-
location.polygon_lookup(polygon_id: 'id', zoom: 1)
|
108
|
-
|
109
|
-
.. note::
|
110
|
-
|
111
|
-
``polygon_id`` needs to be a string. ``Zoom`` is a number ranging from 1-20.
|
112
|
-
|
113
|
-
|
114
|
-
Location Date Ranges
|
115
|
-
--------------------
|
116
|
-
|
117
|
-
Get the possible date ranges that can be used with location endpoints. See `the documentation
|
118
|
-
on location date ranges <http://docs.airship.com/api/ua.html#location-date-ranges>`__
|
119
|
-
for more information.
|
120
|
-
|
121
|
-
.. code-block:: ruby
|
122
|
-
|
123
|
-
require 'urbanairship'
|
124
|
-
UA = Urbanairship
|
125
|
-
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
126
|
-
l = UA::Location.new(client: airship)
|
127
|
-
l.date_ranges
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'urbanairship'
|
2
|
-
|
3
|
-
|
4
|
-
module Urbanairship
|
5
|
-
module Push
|
6
|
-
class Location
|
7
|
-
include Urbanairship::Common
|
8
|
-
include Urbanairship::Loggable
|
9
|
-
|
10
|
-
def initialize(client: required('client'))
|
11
|
-
@client = client
|
12
|
-
end
|
13
|
-
|
14
|
-
def name_lookup(name: required('name'), type: nil)
|
15
|
-
fail ArgumentError, 'name needs to be a string' unless name.is_a? String
|
16
|
-
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
17
|
-
path = location_path('?q=' + name)
|
18
|
-
path += '&type=' + type unless type.nil?
|
19
|
-
resp = @client.send_request(
|
20
|
-
method: 'GET',
|
21
|
-
path: path
|
22
|
-
)
|
23
|
-
logger.info("Retrieved location information for #{name}")
|
24
|
-
resp
|
25
|
-
end
|
26
|
-
|
27
|
-
def coordinates_lookup(latitude: required('latitude'), longitude: required('longitude'), type: nil)
|
28
|
-
fail ArgumentError,
|
29
|
-
'latitude and longitude need to be numbers' unless latitude.is_a? Numeric and longitude.is_a? Numeric
|
30
|
-
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
31
|
-
path = location_path(latitude.to_s + ',' + longitude.to_s)
|
32
|
-
path += '?type=' + type unless type.nil?
|
33
|
-
resp = @client.send_request(
|
34
|
-
method: 'GET',
|
35
|
-
path: path
|
36
|
-
)
|
37
|
-
logger.info("Retrieved location information for latitude #{latitude} and longitude #{longitude}")
|
38
|
-
resp
|
39
|
-
end
|
40
|
-
|
41
|
-
def bounding_box_lookup(lat1: required('lat1'), long1: required('long1'),
|
42
|
-
lat2: required('lat2'), long2: required('long2'), type: nil)
|
43
|
-
|
44
|
-
fail ArgumentError,
|
45
|
-
'lat1, long1, lat2, and long2 need to be numbers' unless lat1.is_a? Numeric and long2.is_a? Numeric\
|
46
|
-
and lat2.is_a? Numeric and long2.is_a? Numeric
|
47
|
-
fail ArgumentError, 'type needs to be a string' unless type.nil? or type.is_a? String
|
48
|
-
path = location_path(lat1.to_s + ',' + long1.to_s + ',' + lat2.to_s + ',' + long2.to_s)
|
49
|
-
path += '?type=' + type unless type.nil?
|
50
|
-
resp = @client.send_request(
|
51
|
-
method: 'GET',
|
52
|
-
path: path
|
53
|
-
)
|
54
|
-
logger.info("Retrieved location information for bounding box with lat1 #{lat1}, long1 #{long1}," +
|
55
|
-
" lat2 #{lat2}, and long2 #{long2}")
|
56
|
-
resp
|
57
|
-
end
|
58
|
-
|
59
|
-
def alias_lookup(from_alias: required('from_alias'))
|
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
|
-
path = location_path('from-alias?')
|
62
|
-
if from_alias.is_a? Array
|
63
|
-
from_alias.each do |a|
|
64
|
-
fail ArgumentError, 'from_alias needs to be a string or an array of strings' unless a.is_a? String
|
65
|
-
path += a + '&'
|
66
|
-
end
|
67
|
-
path = path.chop
|
68
|
-
else
|
69
|
-
path += from_alias
|
70
|
-
end
|
71
|
-
|
72
|
-
resp = @client.send_request(
|
73
|
-
method: 'GET',
|
74
|
-
path: path
|
75
|
-
)
|
76
|
-
logger.info("Retrieved location info from alias #{from_alias}")
|
77
|
-
resp
|
78
|
-
end
|
79
|
-
|
80
|
-
def polygon_lookup(polygon_id: required('polygon_id'), zoom: required('zoom'))
|
81
|
-
fail ArgumentError, 'polygon_id needs to be a string' unless polygon_id.is_a? String
|
82
|
-
fail ArgumentError, 'zoom needs to be an integer' unless zoom.is_a? Integer
|
83
|
-
|
84
|
-
path = location_path(polygon_id + '?zoom=' + zoom.to_s)
|
85
|
-
resp = @client.send_request(
|
86
|
-
method: 'GET',
|
87
|
-
path: path
|
88
|
-
)
|
89
|
-
logger.info("Retrieved location info for polygon #{polygon_id} and zoom level #{zoom}")
|
90
|
-
resp
|
91
|
-
end
|
92
|
-
|
93
|
-
def date_ranges
|
94
|
-
resp = @client.send_request(
|
95
|
-
method: 'GET',
|
96
|
-
path: segments_path('dates/')
|
97
|
-
)
|
98
|
-
logger.info('Retrieved location date ranges')
|
99
|
-
resp
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|