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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c59ef6860b18c605ab3c844cac4f320215a981421129ca2eb7d537acaea1f738
4
- data.tar.gz: 25cd36b90507702986d11172e2f0345686e2bf14a372f3af42323b50b37196a5
3
+ metadata.gz: 874fcd1fd4238073124c6f5e5eb058dd38fc5a724d248b14eded7eef774f5c7f
4
+ data.tar.gz: 264386019f1f5a6260d54c6b0c94a42eb7ca4d5620717f9de2369e13e6fe0195
5
5
  SHA512:
6
- metadata.gz: 0dee64ba2af519b0b0ae00cbbb68a936d280aa2aafc130c3c7d4ca9dbdcefb302971ac577d15b43b1b3e1a89620501825d02e877f298a2763cbdbdc9b08dbfed
7
- data.tar.gz: 6788d6eea52021eb3d04b97533f9594270af300cee70fe80a6e822407d940a3fccd1f821a151ac78f2218d1db22618fa86c48ac5dd05fb9909917e96c3070217
6
+ metadata.gz: 63e8eefcf42622491e89bddc697773d6056629f89aa7d70ef6a6deeb08e6d3961fcaedc74d708fffed9ec5fc001bef1bb94e00a59e666a768878dc39536c9e64
7
+ data.tar.gz: 6feb7bbe4410abfbe5742ec81c4164093a9187ec1b13ae6be92650e89f4da5d17f485d150f1c8e969a8fea42c3266a993854434eeafb96d4a3553817411f096e
@@ -12,7 +12,7 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: ['2.3']
15
+ ruby-version: ['2.4']
16
16
 
17
17
  steps:
18
18
  - uses: actions/checkout@v2
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.4.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- seatsio (32.6.0)
4
+ seatsio (35.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -49,4 +49,4 @@ DEPENDENCIES
49
49
  webmock (~> 3.4, >= 3.4.2)
50
50
 
51
51
  BUNDLED WITH
52
- 1.17.2
52
+ 2.1.4
data/README.md CHANGED
@@ -3,12 +3,16 @@
3
3
  [![Build](https://github.com/seatsio/seatsio-ruby/workflows/Build/badge.svg)](https://github.com/seatsio/seatsio-ruby/actions/workflows/build.yml)
4
4
  [![Gem Version](https://badge.fury.io/rb/seatsio.svg)](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.2.0+
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
@@ -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 ChartReportItem
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] << ChartReportItem.new(value)
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 << EventReportItem.new(item)
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] << EventReportItem.new(value)
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 EventReportItem
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, :is_selectable, :is_disabled_by_social_distancing, :channel,
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
- @is_selectable = data['isSelectable']
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] = EventReportItem.new(value)
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 by_selectability(event_key, selectability = nil)
75
- fetch_report('bySelectability', event_key, selectability)
74
+ def by_availability(event_key, availability = nil)
75
+ fetch_report('byAvailability', event_key, availability)
76
76
  end
77
77
 
78
- def summary_by_selectability(event_key)
79
- fetch_summary_report('bySelectability', event_key)
78
+ def summary_by_availability(event_key)
79
+ fetch_summary_report('byAvailability', event_key)
80
80
  end
81
81
 
82
- def deep_summary_by_selectability(event_key)
83
- fetch_deep_summary_report('bySelectability', event_key)
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)
@@ -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 retrieve_object_status(key:, object_key:)
47
- url = "events/#{key}/objects/#{CGI::escape(object_key).gsub('+', '%20')}"
48
- response = @http_client.get(url)
49
- ObjectStatus.new(response)
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, ObjectStatus::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)
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("seasons/actions/change-object-status", request)
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, ObjectStatus::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)
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, ObjectStatus::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)
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, ObjectStatus::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)
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, ObjectStatus::FREE, hold_token: hold_token, order_id: order_id, keep_extra_data: keep_extra_data, ignore_channels: ignore_channels, channel_keys: channel_keys)
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:)
@@ -3,6 +3,9 @@ module Seatsio
3
3
  class SeatsioException < StandardError
4
4
  end
5
5
 
6
+ class RateLimitExceededException < SeatsioException
7
+ end
8
+
6
9
  class NoMorePagesException < SeatsioException
7
10
  end
8
11
 
@@ -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
- raise Exception::SeatsioException.new(e.response)
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
@@ -1,3 +1,3 @@
1
1
  module Seatsio
2
- VERSION = "32.6.0"
2
+ VERSION = "35.0.0"
3
3
  end
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: 32.6.0
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-09-14 00:00:00.000000000 Z
11
+ date: 2021-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler