seatsio 32.6.0 → 35.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/workflows/build.yml +1 -1
- data/.ruby-version +1 -1
- data/Gemfile.lock +2 -2
- data/README.md +41 -5
- data/lib/seatsio/domain.rb +14 -28
- data/lib/seatsio/event_reports.rb +6 -6
- data/lib/seatsio/events.rb +19 -10
- data/lib/seatsio/exception.rb +3 -0
- data/lib/seatsio/httpClient.rb +14 -4
- data/lib/seatsio/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 874fcd1fd4238073124c6f5e5eb058dd38fc5a724d248b14eded7eef774f5c7f
|
4
|
+
data.tar.gz: 264386019f1f5a6260d54c6b0c94a42eb7ca4d5620717f9de2369e13e6fe0195
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63e8eefcf42622491e89bddc697773d6056629f89aa7d70ef6a6deeb08e6d3961fcaedc74d708fffed9ec5fc001bef1bb94e00a59e666a768878dc39536c9e64
|
7
|
+
data.tar.gz: 6feb7bbe4410abfbe5742ec81c4164093a9187ec1b13ae6be92650e89f4da5d17f485d150f1c8e969a8fea42c3266a993854434eeafb96d4a3553817411f096e
|
data/.github/workflows/build.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -3,12 +3,16 @@
|
|
3
3
|
[](https://github.com/seatsio/seatsio-ruby/actions/workflows/build.yml)
|
4
4
|
[](https://badge.fury.io/rb/seatsio)
|
5
5
|
|
6
|
-
This is the official Ruby client library for the [Seats.io V2 REST API](https://docs.seats.io/docs/api-overview), supporting Ruby 2.
|
6
|
+
This is the official Ruby client library for the [Seats.io V2 REST API](https://docs.seats.io/docs/api-overview), supporting Ruby 2.4.0+
|
7
7
|
|
8
8
|
## Versioning
|
9
9
|
|
10
10
|
seatsio-ruby follows semver since v23.3.0.
|
11
11
|
|
12
|
+
## API reference
|
13
|
+
|
14
|
+
You can find a full API reference at https://www.rubydoc.info/gems/seatsio/
|
15
|
+
|
12
16
|
## Examples
|
13
17
|
|
14
18
|
### Creating a chart and an event
|
@@ -52,6 +56,22 @@ client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
|
|
52
56
|
client.events.change_object_status("<EVENT KEY>", ["A-1", "A-2"], "my-custom-status")
|
53
57
|
```
|
54
58
|
|
59
|
+
### Retrieving object category and status (and other information)
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
require('seatsio')
|
63
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
|
64
|
+
object_infos = client.events.retrieve_object_infos key: event.key, labels: ['A-1', 'A-2']
|
65
|
+
|
66
|
+
puts object_infos['A-1'].category_key
|
67
|
+
puts object_infos['A-1'].category_label
|
68
|
+
puts object_infos['A-1'].status
|
69
|
+
|
70
|
+
puts object_infos['A-2'].category_key
|
71
|
+
puts object_infos['A-2'].category_label
|
72
|
+
puts object_infos['A-2'].status
|
73
|
+
```
|
74
|
+
|
55
75
|
### Listing all charts
|
56
76
|
|
57
77
|
```ruby
|
@@ -73,7 +93,8 @@ Each page is Enumerable, and it has `next_page_starts_after` and `previous_page_
|
|
73
93
|
|
74
94
|
```ruby
|
75
95
|
# ... user initially opens the screen ...
|
76
|
-
|
96
|
+
require('seatsio')
|
97
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
|
77
98
|
firstPage = client.charts.list.first_page()
|
78
99
|
firstPage.each do |chart|
|
79
100
|
puts chart.key
|
@@ -82,7 +103,8 @@ end
|
|
82
103
|
|
83
104
|
```ruby
|
84
105
|
# ... user clicks on 'next page' button ...
|
85
|
-
|
106
|
+
require('seatsio')
|
107
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
|
86
108
|
nextPage = client.charts.list.page_after(firstPage.next_page_starts_after)
|
87
109
|
nextPage.each do |chart|
|
88
110
|
puts chart.key
|
@@ -91,7 +113,8 @@ end
|
|
91
113
|
|
92
114
|
```ruby
|
93
115
|
# ... user clicks on 'previous page' button ...
|
94
|
-
|
116
|
+
require('seatsio')
|
117
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
|
95
118
|
previousPage = client.charts.list.page_before(nextPage.previous_page_ends_before)
|
96
119
|
previousPage.each do |chart|
|
97
120
|
puts chart.key
|
@@ -102,10 +125,21 @@ end
|
|
102
125
|
|
103
126
|
```ruby
|
104
127
|
require('seatsio')
|
105
|
-
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-company-admin-key")
|
128
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-company-admin-key") # can be found on https://app.seats.io/company-settings
|
106
129
|
client.workspaces.create name: "a workspace"
|
107
130
|
```
|
108
131
|
|
132
|
+
### Creating a chart and an event with the company admin key
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
require('seatsio')
|
136
|
+
# company admin key can be found on https://app.seats.io/company-settings
|
137
|
+
# workspace public key can be found on https://app.seats.io/workspace-settings
|
138
|
+
client = Seatsio::Client.new(Seatsio::Region.EU(), "my-company-admin-key", "my-workspace-public-key")
|
139
|
+
chart = client.charts.create
|
140
|
+
event = client.events.create chart_key: chart.key
|
141
|
+
```
|
142
|
+
|
109
143
|
# Error handling
|
110
144
|
|
111
145
|
When an API call results in a 4xx or 5xx error (e.g. when a chart could not be found), a SeatsioException is thrown.
|
@@ -123,6 +157,8 @@ This library supports [exponential backoff](https://en.wikipedia.org/wiki/Expone
|
|
123
157
|
When you send too many concurrent requests, the server returns an error `429 - Too Many Requests`. The client reacts to this by waiting for a while, and then retrying the request.
|
124
158
|
If the request still fails with an error `429`, it waits a little longer, and try again. By default this happens 5 times, before giving up (after approximately 15 seconds).
|
125
159
|
|
160
|
+
We throw a `RateLimitExceededException` (which is a subclass of `SeatsioException`) when exponential backoff eventually fails.
|
161
|
+
|
126
162
|
To change the maximum number of retries, create the client as follows:
|
127
163
|
|
128
164
|
```ruby
|
data/lib/seatsio/domain.rb
CHANGED
@@ -201,25 +201,6 @@ module Seatsio
|
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
204
|
-
class ObjectStatus
|
205
|
-
FREE = 'free'
|
206
|
-
BOOKED = 'booked'
|
207
|
-
HELD = 'reservedByToken'
|
208
|
-
|
209
|
-
attr_reader :status, :hold_token, :order_id, :ticket_type,
|
210
|
-
:quantity, :extra_data, :for_sale
|
211
|
-
|
212
|
-
def initialize(data)
|
213
|
-
@status = data['status']
|
214
|
-
@hold_token = data['holdToken']
|
215
|
-
@order_id = data['orderId']
|
216
|
-
@ticket_type = data['ticketType']
|
217
|
-
@quantity = data['quantity']
|
218
|
-
@extra_data = data['extraData']
|
219
|
-
@for_sale = data['forSale']
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
204
|
class ChangeObjectStatusResult
|
224
205
|
|
225
206
|
attr_reader :objects
|
@@ -261,7 +242,7 @@ module Seatsio
|
|
261
242
|
end
|
262
243
|
end
|
263
244
|
|
264
|
-
class
|
245
|
+
class ChartObjectInfo
|
265
246
|
|
266
247
|
attr_reader :label, :labels, :ids, :category_key, :category_label, :section, :entrance, :capacity, :object_type,
|
267
248
|
:left_neighbour, :right_neighbour, :book_as_a_whole, :distance_to_focal_point
|
@@ -292,7 +273,7 @@ module Seatsio
|
|
292
273
|
data.each do |key, values|
|
293
274
|
items[key] = []
|
294
275
|
values.each do |value|
|
295
|
-
items[key] <<
|
276
|
+
items[key] << ChartObjectInfo.new(value)
|
296
277
|
end
|
297
278
|
end
|
298
279
|
@items = items
|
@@ -307,7 +288,7 @@ module Seatsio
|
|
307
288
|
if data.is_a? Array
|
308
289
|
items = []
|
309
290
|
data.each do |item|
|
310
|
-
items <<
|
291
|
+
items << EventObjectInfo.new(item)
|
311
292
|
end
|
312
293
|
@items = items
|
313
294
|
elsif data.nil?
|
@@ -317,7 +298,7 @@ module Seatsio
|
|
317
298
|
data.each do |key, values|
|
318
299
|
items[key] = []
|
319
300
|
values.each do |value|
|
320
|
-
items[key] <<
|
301
|
+
items[key] << EventObjectInfo.new(value)
|
321
302
|
end
|
322
303
|
end
|
323
304
|
@items = items
|
@@ -325,13 +306,17 @@ module Seatsio
|
|
325
306
|
end
|
326
307
|
end
|
327
308
|
|
328
|
-
class
|
309
|
+
class EventObjectInfo
|
310
|
+
FREE = 'free'
|
311
|
+
BOOKED = 'booked'
|
312
|
+
HELD = 'reservedByToken'
|
313
|
+
|
329
314
|
attr_reader :labels, :ids, :label, :order_id, :extra_data, :capacity, :status,
|
330
315
|
:category_key, :entrance, :object_type, :hold_token, :category_label,
|
331
316
|
:ticket_type, :num_booked, :num_free, :num_held, :for_sale, :section,
|
332
317
|
:is_accessible, :is_companion_seat, :has_restricted_view, :displayed_object_type,
|
333
|
-
:left_neighbour, :right_neighbour, :
|
334
|
-
:book_as_a_whole, :distance_to_focal_point
|
318
|
+
:left_neighbour, :right_neighbour, :is_available, :is_disabled_by_social_distancing, :channel,
|
319
|
+
:book_as_a_whole, :distance_to_focal_point, :holds
|
335
320
|
|
336
321
|
def initialize(data)
|
337
322
|
@status = data['status']
|
@@ -358,11 +343,12 @@ module Seatsio
|
|
358
343
|
@displayed_object_type = data['displayedObjectType']
|
359
344
|
@left_neighbour = data['leftNeighbour']
|
360
345
|
@right_neighbour = data['rightNeighbour']
|
361
|
-
@
|
346
|
+
@is_available = data['isAvailable']
|
362
347
|
@is_disabled_by_social_distancing = data['isDisabledBySocialDistancing']
|
363
348
|
@channel = data['channel']
|
364
349
|
@book_as_a_whole = data['bookAsAWhole']
|
365
350
|
@distance_to_focal_point = data['distanceToFocalPoint']
|
351
|
+
@holds = data['holds']
|
366
352
|
end
|
367
353
|
end
|
368
354
|
|
@@ -506,7 +492,7 @@ module Seatsio
|
|
506
492
|
def to_object_details(data)
|
507
493
|
object_details = {}
|
508
494
|
data.each do |key, value|
|
509
|
-
object_details[key] =
|
495
|
+
object_details[key] = EventObjectInfo.new(value)
|
510
496
|
end
|
511
497
|
object_details
|
512
498
|
end
|
@@ -71,16 +71,16 @@ module Seatsio
|
|
71
71
|
fetch_deep_summary_report('bySection', event_key)
|
72
72
|
end
|
73
73
|
|
74
|
-
def
|
75
|
-
fetch_report('
|
74
|
+
def by_availability(event_key, availability = nil)
|
75
|
+
fetch_report('byAvailability', event_key, availability)
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
79
|
-
fetch_summary_report('
|
78
|
+
def summary_by_availability(event_key)
|
79
|
+
fetch_summary_report('byAvailability', event_key)
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
83
|
-
fetch_deep_summary_report('
|
82
|
+
def deep_summary_by_availability(event_key)
|
83
|
+
fetch_deep_summary_report('byAvailability', event_key)
|
84
84
|
end
|
85
85
|
|
86
86
|
def by_channel(event_key, channelKey = nil)
|
data/lib/seatsio/events.rb
CHANGED
@@ -43,14 +43,23 @@ module Seatsio
|
|
43
43
|
@http_client.post("events/#{key}/actions/update-extra-data", payload)
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
def retrieve_object_info(key:, label:)
|
47
|
+
result = retrieve_object_infos key: key, labels: [label]
|
48
|
+
result[label]
|
49
|
+
end
|
50
|
+
|
51
|
+
def retrieve_object_infos(key:, labels:)
|
52
|
+
url = "events/#{key}/objects"
|
53
|
+
query_params = URI.encode_www_form(labels.map { |label| ['label', label]})
|
54
|
+
response = @http_client.get(url, query_params)
|
55
|
+
response.each do |key, value|
|
56
|
+
response[key] = EventObjectInfo.new(value)
|
57
|
+
end
|
58
|
+
response
|
50
59
|
end
|
51
60
|
|
52
61
|
def book(event_key_or_keys, object_or_objects, hold_token: nil, order_id: nil, keep_extra_data: nil, ignore_channels: nil, channel_keys: nil, ignore_social_distancing: nil)
|
53
|
-
self.change_object_status(event_key_or_keys, object_or_objects,
|
62
|
+
self.change_object_status(event_key_or_keys, object_or_objects, Seatsio::EventObjectInfo::BOOKED, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, ignore_channels: ignore_channels, channel_keys: channel_keys, ignore_social_distancing: ignore_social_distancing)
|
54
63
|
end
|
55
64
|
|
56
65
|
def change_object_status(event_key_or_keys, object_or_objects, status, hold_token: nil, order_id: nil, keep_extra_data: nil, ignore_channels: nil, channel_keys: nil, ignore_social_distancing: nil)
|
@@ -58,7 +67,7 @@ module Seatsio
|
|
58
67
|
request[:params] = {
|
59
68
|
:expand => 'objects'
|
60
69
|
}
|
61
|
-
response = @http_client.post("
|
70
|
+
response = @http_client.post("events/groups/actions/change-object-status", request)
|
62
71
|
ChangeObjectStatusResult.new(response)
|
63
72
|
end
|
64
73
|
|
@@ -72,7 +81,7 @@ module Seatsio
|
|
72
81
|
end
|
73
82
|
|
74
83
|
def hold(event_key_or_keys, object_or_objects, hold_token, order_id: nil, keep_extra_data: nil, ignore_channels: nil, channel_keys: nil, ignore_social_distancing: nil)
|
75
|
-
change_object_status(event_key_or_keys, object_or_objects,
|
84
|
+
change_object_status(event_key_or_keys, object_or_objects, Seatsio::EventObjectInfo::HELD, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, ignore_channels: ignore_channels, channel_keys: channel_keys, ignore_social_distancing: ignore_social_distancing)
|
76
85
|
end
|
77
86
|
|
78
87
|
def change_best_available_object_status(key, number, status, categories: nil, hold_token: nil, extra_data: nil, ticket_types: nil, order_id: nil, keep_extra_data: nil, ignore_channels: nil, channel_keys: nil)
|
@@ -82,15 +91,15 @@ module Seatsio
|
|
82
91
|
end
|
83
92
|
|
84
93
|
def book_best_available(key, number, categories: nil, hold_token: nil, order_id: nil, keep_extra_data: nil, extra_data: nil, ticket_types: nil, ignore_channels: nil, channel_keys: nil)
|
85
|
-
change_best_available_object_status(key, number,
|
94
|
+
change_best_available_object_status(key, number, Seatsio::EventObjectInfo::BOOKED, categories: categories, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, extra_data: extra_data, ticket_types: ticket_types, ignore_channels: ignore_channels, channel_keys: channel_keys)
|
86
95
|
end
|
87
96
|
|
88
97
|
def hold_best_available(key, number, hold_token, categories: nil, order_id: nil, keep_extra_data: nil, extra_data: nil, ticket_types: nil, ignore_channels: nil, channel_keys: nil)
|
89
|
-
change_best_available_object_status(key, number,
|
98
|
+
change_best_available_object_status(key, number, Seatsio::EventObjectInfo::HELD, categories: categories, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, extra_data: extra_data, ticket_types: ticket_types, ignore_channels: ignore_channels, channel_keys: channel_keys)
|
90
99
|
end
|
91
100
|
|
92
101
|
def release(event_key_or_keys, object_or_objects, hold_token: nil, order_id: nil, keep_extra_data: nil, ignore_channels: nil, channel_keys: nil)
|
93
|
-
change_object_status(event_key_or_keys, object_or_objects,
|
102
|
+
change_object_status(event_key_or_keys, object_or_objects, Seatsio::EventObjectInfo::FREE, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, ignore_channels: ignore_channels, channel_keys: channel_keys)
|
94
103
|
end
|
95
104
|
|
96
105
|
def delete(key:)
|
data/lib/seatsio/exception.rb
CHANGED
data/lib/seatsio/httpClient.rb
CHANGED
@@ -19,12 +19,18 @@ module Seatsio
|
|
19
19
|
unless @workspace_key.nil?
|
20
20
|
headers[:'X-Workspace-Key'] = @workspace_key
|
21
21
|
end
|
22
|
-
if args[2].include? :params
|
23
|
-
headers[:params] = args[2][:params]
|
24
|
-
end
|
25
22
|
|
26
23
|
url = "#{@base_url}/#{args[1]}"
|
27
24
|
|
25
|
+
if args[2].include? :params
|
26
|
+
params = args[2][:params]
|
27
|
+
if params.is_a? Hash
|
28
|
+
headers[:params] = params
|
29
|
+
else
|
30
|
+
url += "?" + params
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
28
34
|
request_options = { method: args[0], url: url, headers: headers }
|
29
35
|
|
30
36
|
if args[0] == :post
|
@@ -42,7 +48,11 @@ module Seatsio
|
|
42
48
|
rescue RestClient::NotFound => e
|
43
49
|
raise Exception::NotFoundException.new(e.response)
|
44
50
|
rescue RestClient::ExceptionWithResponse => e
|
45
|
-
|
51
|
+
if e.response.code == 429
|
52
|
+
raise Exception::RateLimitExceededException.new(e.response)
|
53
|
+
else
|
54
|
+
raise Exception::SeatsioException.new(e.response)
|
55
|
+
end
|
46
56
|
rescue RestClient::Exceptions::Timeout
|
47
57
|
raise Exception::SeatsioException.new("Timeout ERROR")
|
48
58
|
rescue SocketError
|
data/lib/seatsio/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seatsio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 35.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seats.io
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|