seatsio 31.0.0 → 32.5.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: bf1124000be835fc50c85b57259d3cc53d0efbb3625bff185329e412f0fd9b33
4
- data.tar.gz: 4f85fb99913ddb488705092c483c88ada2da298a0f9b7dbcee90df3cae558a4d
3
+ metadata.gz: 4d21c2748ea74524c6c7889fd9ef694673a5fb9d52c31a8feac6b4de8ec43f69
4
+ data.tar.gz: 51678457cdd12e5e6f1ea7f0793d91c2b9cb1560b7fd924a3610cf6d09e4aaa9
5
5
  SHA512:
6
- metadata.gz: fd5ed35d871c54d7101e78eaacb2fd9925ef0894e69d56150eecd671b04b8a01cafaabe57b51b94c02326c4a9acbdfe27fe1dbed1a680e3700c6d80ebef5723e
7
- data.tar.gz: 933fe7bb11ebcc7e9c15f8efbe8dafbfb5c9b584f351f5cef9c949a51a0dd243eda159077d8be2b79b042e9eaab44947b1c1b1feaabddb8ca554bc487e11e3b9
6
+ metadata.gz: '08be1edebfa338f7f2563dd4cb00755c2092bb2582c0b24356d0ed33c6764b1b4d3ae8f8e33f4b6b743183d14bafdf063c9e26ab5121fb269e37ff8c62d04c4b'
7
+ data.tar.gz: 9394d8015e7314e6543c7de272e687ebfb9267da58cf4d68374f205c98403414765e61c40534fe54ba74b48d43b5bd1929105a722e9897759370ffcb005fa8f3
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: monthly
7
+ open-pull-requests-limit: 10
8
+ ignore:
9
+ - dependency-name: minitest
10
+ versions:
11
+ - 5.14.4
data/Gemfile.lock CHANGED
@@ -1,36 +1,38 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- seatsio (31.0.0)
4
+ seatsio (32.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- addressable (2.6.0)
10
- public_suffix (>= 2.0.2, < 4.0)
11
- crack (0.4.3)
12
- safe_yaml (~> 1.0.0)
13
- domain_name (0.5.20180417)
9
+ addressable (2.8.0)
10
+ public_suffix (>= 2.0.2, < 5.0)
11
+ crack (0.4.5)
12
+ rexml
13
+ domain_name (0.5.20190701)
14
14
  unf (>= 0.0.5, < 1.0.0)
15
- hashdiff (0.4.0)
15
+ hashdiff (1.0.1)
16
+ http-accept (1.7.0)
16
17
  http-cookie (1.0.3)
17
18
  domain_name (~> 0.5)
18
- mime-types (3.2.2)
19
+ mime-types (3.3.1)
19
20
  mime-types-data (~> 3.2015)
20
- mime-types-data (3.2019.0331)
21
- minitest (5.11.3)
21
+ mime-types-data (3.2021.0225)
22
+ minitest (5.14.4)
22
23
  netrc (0.11.0)
23
- public_suffix (3.1.0)
24
- rake (13.0.1)
25
- rest-client (2.0.2)
24
+ public_suffix (4.0.6)
25
+ rake (13.0.6)
26
+ rest-client (2.1.0)
27
+ http-accept (>= 1.7.0, < 2.0)
26
28
  http-cookie (>= 1.0.2, < 2.0)
27
29
  mime-types (>= 1.16, < 4.0)
28
30
  netrc (~> 0.8)
29
- safe_yaml (1.0.5)
31
+ rexml (3.2.5)
30
32
  unf (0.1.4)
31
33
  unf_ext
32
- unf_ext (0.0.7.6)
33
- webmock (3.6.0)
34
+ unf_ext (0.0.7.7)
35
+ webmock (3.13.0)
34
36
  addressable (>= 2.3.6)
35
37
  crack (>= 0.3.2)
36
38
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -39,7 +41,7 @@ PLATFORMS
39
41
  ruby
40
42
 
41
43
  DEPENDENCIES
42
- bundler (~> 1.16)
44
+ bundler (~> 2.2)
43
45
  minitest (~> 5.0)
44
46
  rake (~> 13.0)
45
47
  rest-client (~> 2.0, >= 2.0.2)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # seatsio-ruby, the official Seats.io Ruby client library
2
2
 
3
- ![Build](https://github.com/seatsio/seatsio-ruby/workflows/Build/badge.svg)
3
+ [![Build](https://github.com/seatsio/seatsio-ruby/workflows/Build/badge.svg)](https://github.com/seatsio/seatsio-ruby/actions/workflows/build.yml)
4
+ [![Gem Version](https://badge.fury.io/rb/seatsio.svg)](https://badge.fury.io/rb/seatsio)
4
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
7
 
@@ -16,7 +17,7 @@ seatsio-ruby follows semver since v23.3.0.
16
17
  require('seatsio')
17
18
  client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key") # can be found on https://app.seats.io/workspace-settings
18
19
  chart = client.charts.create
19
- event = client.events.create key: chart.key
20
+ event = client.events.create chart_key: chart.key
20
21
  ```
21
22
 
22
23
  ### Booking objects
@@ -113,3 +114,11 @@ This exception contains a message string describing what went wrong, and also tw
113
114
 
114
115
  * *errors*: a list of errors that the server returned. In most cases, this array will contain only one element, an instance of ApiError, containing an error code and a message.
115
116
  * *requestId*: the identifier of the request you made. Please mention this to us when you have questions, as it will make debugging easier.
117
+
118
+
119
+ ## Rate limiting - exponential backoff
120
+
121
+ This library supports [exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff).
122
+
123
+ 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
+ If the request still fails with an error `429`, it waits a little longer, and try again. This happens at most 5 times, before giving up (after approximately 15 seconds).
@@ -14,6 +14,10 @@ module Seatsio
14
14
  get_chart_report('byLabel', chart_key, book_whole_tables)
15
15
  end
16
16
 
17
+ def by_object_type(chart_key, book_whole_tables = nil)
18
+ get_chart_report('byObjectType', chart_key, book_whole_tables)
19
+ end
20
+
17
21
  def by_category_key(chart_key, book_whole_tables = nil)
18
22
  get_chart_report('byCategoryKey', chart_key, book_whole_tables)
19
23
  end
@@ -263,12 +263,13 @@ module Seatsio
263
263
 
264
264
  class ChartReportItem
265
265
 
266
- attr_reader :label, :labels, :category_key, :category_label, :section, :entrance, :capacity, :object_type,
267
- :left_neighbour, :right_neighbour, :book_as_a_whole
266
+ attr_reader :label, :labels, :ids, :category_key, :category_label, :section, :entrance, :capacity, :object_type,
267
+ :left_neighbour, :right_neighbour, :book_as_a_whole, :distance_to_focal_point
268
268
 
269
269
  def initialize(data)
270
270
  @label = data['label']
271
271
  @labels = data['labels']
272
+ @ids = data['ids']
272
273
  @category_label = data['categoryLabel']
273
274
  @category_key = data['categoryKey']
274
275
  @section = data['section']
@@ -278,6 +279,7 @@ module Seatsio
278
279
  @left_neighbour = data['leftNeighbour']
279
280
  @right_neighbour = data['rightNeighbour']
280
281
  @book_as_a_whole = data['bookAsAWhole']
282
+ @distance_to_focal_point = data['distanceToFocalPoint']
281
283
  end
282
284
  end
283
285
 
@@ -324,17 +326,18 @@ module Seatsio
324
326
  end
325
327
 
326
328
  class EventReportItem
327
- attr_reader :labels, :label, :order_id, :extra_data, :capacity, :status,
329
+ attr_reader :labels, :ids, :label, :order_id, :extra_data, :capacity, :status,
328
330
  :category_key, :entrance, :object_type, :hold_token, :category_label,
329
331
  :ticket_type, :num_booked, :num_free, :num_held, :for_sale, :section,
330
332
  :is_accessible, :is_companion_seat, :has_restricted_view, :displayed_object_type,
331
333
  :left_neighbour, :right_neighbour, :is_selectable, :is_disabled_by_social_distancing, :channel,
332
- :book_as_a_whole
334
+ :book_as_a_whole, :distance_to_focal_point
333
335
 
334
336
  def initialize(data)
335
337
  @status = data['status']
336
338
  @label = data['label']
337
339
  @labels = data['labels']
340
+ @ids = data['ids']
338
341
  @category_label = data['categoryLabel']
339
342
  @category_key = data['categoryKey']
340
343
  @ticket_type = data['ticketType']
@@ -359,6 +362,7 @@ module Seatsio
359
362
  @is_disabled_by_social_distancing = data['isDisabledBySocialDistancing']
360
363
  @channel = data['channel']
361
364
  @book_as_a_whole = data['bookAsAWhole']
365
+ @distance_to_focal_point = data['distanceToFocalPoint']
362
366
  end
363
367
  end
364
368
 
@@ -11,6 +11,10 @@ module Seatsio
11
11
  @http_client = ::Seatsio::HttpClient.new(secret_key, workspace_key, base_url)
12
12
  end
13
13
 
14
+ def by_status(event_key, status = nil)
15
+ fetch_report('byStatus', event_key, status)
16
+ end
17
+
14
18
  def summary_by_status(event_key)
15
19
  fetch_summary_report('byStatus', event_key)
16
20
  end
@@ -19,6 +23,22 @@ module Seatsio
19
23
  fetch_deep_summary_report('byStatus', event_key)
20
24
  end
21
25
 
26
+ def by_object_type(event_key, object_type = nil)
27
+ fetch_report('byObjectType', event_key, object_type)
28
+ end
29
+
30
+ def summary_by_object_type(event_key)
31
+ fetch_summary_report('byObjectType', event_key)
32
+ end
33
+
34
+ def deep_summary_by_object_type(event_key)
35
+ fetch_deep_summary_report('byObjectType', event_key)
36
+ end
37
+
38
+ def by_category_key(event_key, category_key = nil)
39
+ fetch_report('byCategoryKey', event_key, category_key)
40
+ end
41
+
22
42
  def summary_by_category_key(event_key)
23
43
  fetch_summary_report('byCategoryKey', event_key)
24
44
  end
@@ -27,6 +47,10 @@ module Seatsio
27
47
  fetch_deep_summary_report('byCategoryKey', event_key)
28
48
  end
29
49
 
50
+ def by_category_label(event_key, category_label = nil)
51
+ fetch_report('byCategoryLabel', event_key, category_label)
52
+ end
53
+
30
54
  def summary_by_category_label(event_key)
31
55
  fetch_summary_report('byCategoryLabel', event_key)
32
56
  end
@@ -35,6 +59,10 @@ module Seatsio
35
59
  fetch_deep_summary_report('byCategoryLabel', event_key)
36
60
  end
37
61
 
62
+ def by_section(event_key, section = nil)
63
+ fetch_report('bySection', event_key, section)
64
+ end
65
+
38
66
  def summary_by_section(event_key)
39
67
  fetch_summary_report('bySection', event_key)
40
68
  end
@@ -43,6 +71,10 @@ module Seatsio
43
71
  fetch_deep_summary_report('bySection', event_key)
44
72
  end
45
73
 
74
+ def by_selectability(event_key, selectability = nil)
75
+ fetch_report('bySelectability', event_key, selectability)
76
+ end
77
+
46
78
  def summary_by_selectability(event_key)
47
79
  fetch_summary_report('bySelectability', event_key)
48
80
  end
@@ -51,6 +83,10 @@ module Seatsio
51
83
  fetch_deep_summary_report('bySelectability', event_key)
52
84
  end
53
85
 
86
+ def by_channel(event_key, channelKey = nil)
87
+ fetch_report('byChannel', event_key, channelKey)
88
+ end
89
+
54
90
  def summary_by_channel(event_key)
55
91
  fetch_summary_report('byChannel', event_key)
56
92
  end
@@ -63,34 +99,10 @@ module Seatsio
63
99
  fetch_report('byLabel', event_key, label)
64
100
  end
65
101
 
66
- def by_status(event_key, status = nil)
67
- fetch_report('byStatus', event_key, status)
68
- end
69
-
70
- def by_category_label(event_key, category_label = nil)
71
- fetch_report('byCategoryLabel', event_key, category_label)
72
- end
73
-
74
- def by_category_key(event_key, category_key = nil)
75
- fetch_report('byCategoryKey', event_key, category_key)
76
- end
77
-
78
102
  def by_order_id(event_key, order_id = nil)
79
103
  fetch_report('byOrderId', event_key, order_id)
80
104
  end
81
105
 
82
- def by_section(event_key, section = nil)
83
- fetch_report('bySection', event_key, section)
84
- end
85
-
86
- def by_selectability(event_key, selectability = nil)
87
- fetch_report('bySelectability', event_key, selectability)
88
- end
89
-
90
- def by_channel(event_key, channelKey = nil)
91
- fetch_report('byChannel', event_key, channelKey)
92
- end
93
-
94
106
  private
95
107
 
96
108
  def fetch_summary_report(report_type, event_key)
@@ -14,27 +14,24 @@ module Seatsio
14
14
 
15
15
  def execute(*args)
16
16
  begin
17
- headers = {:Authorization => "Basic #{@secret_key}"}
17
+ headers = { :Authorization => "Basic #{@secret_key}" }
18
18
  unless @workspace_key.nil?
19
19
  headers[:'X-Workspace-Key'] = @workspace_key
20
20
  end
21
21
  if args[2].include? :params
22
22
  headers[:params] = args[2][:params]
23
23
  end
24
- #if args[2] != nil || args[0] == :post
25
- # headers[:params] = args[2]
26
- #end
27
24
 
28
25
  url = "#{@base_url}/#{args[1]}"
29
26
 
30
- request_options = {method: args[0], url: url, headers: headers}
27
+ request_options = { method: args[0], url: url, headers: headers }
31
28
 
32
29
  if args[0] == :post
33
30
  args[2].delete :params
34
31
  request_options[:payload] = args[2].to_json
35
32
  end
36
33
 
37
- response = RestClient::Request.execute(request_options)
34
+ response = execute_with_retries(request_options)
38
35
 
39
36
  # If RAW
40
37
  if args[3]
@@ -44,9 +41,6 @@ module Seatsio
44
41
  rescue RestClient::NotFound => e
45
42
  raise Exception::NotFoundException.new(e.response)
46
43
  rescue RestClient::ExceptionWithResponse => e
47
- if e.response.include? "there is no page after" || e.response.empty?
48
- raise Exception::NoMorePagesException
49
- end
50
44
  raise Exception::SeatsioException.new(e.response)
51
45
  rescue RestClient::Exceptions::Timeout
52
46
  raise Exception::SeatsioException.new("Timeout ERROR")
@@ -55,12 +49,29 @@ module Seatsio
55
49
  end
56
50
  end
57
51
 
52
+ def execute_with_retries(request_options)
53
+ retry_count = 0
54
+ while true
55
+ begin
56
+ return RestClient::Request.execute(request_options)
57
+ rescue RestClient::ExceptionWithResponse => e
58
+ if e.response.code != 429 || retry_count >= 5
59
+ raise e
60
+ else
61
+ wait_time = (2 ** (retry_count + 2)) / 10.0
62
+ sleep(wait_time)
63
+ retry_count += 1
64
+ end
65
+ end
66
+ end
67
+ end
68
+
58
69
  def get_raw(endpoint, params = {})
59
70
  execute(:get, endpoint, params, true)
60
71
  end
61
72
 
62
73
  def get(endpoint, params = {})
63
- payload = {:params => params}
74
+ payload = { :params => params }
64
75
  execute(:get, endpoint, payload)
65
76
  end
66
77
 
@@ -89,8 +89,6 @@ module Seatsio
89
89
 
90
90
  @collection += parsed_items
91
91
  set_query_param(:start_after_id, items.last['id']) unless last?
92
- rescue Seatsio::Exception::NoMorePagesException
93
- @last_response_empty = true
94
92
  end
95
93
  end
96
94
  end
@@ -1,3 +1,3 @@
1
1
  module Seatsio
2
- VERSION = "31.0.0"
2
+ VERSION = "32.5.0"
3
3
  end
@@ -8,6 +8,7 @@ require "seatsio/domain"
8
8
 
9
9
  module Seatsio
10
10
  class WorkspacesClient
11
+
11
12
  def initialize(secret_key, base_url)
12
13
  @http_client = ::Seatsio::HttpClient.new(secret_key, nil, base_url)
13
14
  end
@@ -50,6 +51,18 @@ module Seatsio
50
51
  extended_cursor
51
52
  end
52
53
 
54
+ def active(filter: nil)
55
+ extended_cursor = Pagination::Cursor.new(Workspace, 'workspaces/active', @http_client)
56
+ extended_cursor.set_query_param('filter', filter)
57
+ extended_cursor
58
+ end
59
+
60
+ def inactive(filter: nil)
61
+ extended_cursor = Pagination::Cursor.new(Workspace, 'workspaces/inactive', @http_client)
62
+ extended_cursor.set_query_param('filter', filter)
63
+ extended_cursor
64
+ end
65
+
53
66
  def retrieve(key:)
54
67
  response = @http_client.get("/workspaces/#{key}")
55
68
  Workspace.new(response)
data/releasing.md CHANGED
@@ -1,4 +1,5 @@
1
1
  *Note: this is internal documentation for the seats.io team*
2
2
 
3
3
  1) Set the correct version number in lib/seatsio/version.rb
4
+ 1) Set the correct version number in Gemfile.lock
4
5
  2) Create the release in GitHub
data/seatsio.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.16"
23
+ spec.add_development_dependency "bundler", "~> 2.2"
24
24
  spec.add_development_dependency "rake", "~> 13.0"
25
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
26
  spec.add_development_dependency "rest-client", '~> 2.0', '>= 2.0.2'
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: 31.0.0
4
+ version: 32.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seats.io
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-12 00:00:00.000000000 Z
11
+ date: 2021-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +100,7 @@ extensions: []
100
100
  extra_rdoc_files: []
101
101
  files:
102
102
  - ".editorconfig"
103
+ - ".github/dependabot.yml"
103
104
  - ".github/workflows/build.yml"
104
105
  - ".github/workflows/publish.yml"
105
106
  - ".gitignore"
@@ -133,7 +134,7 @@ files:
133
134
  homepage: http://seats.io
134
135
  licenses: []
135
136
  metadata: {}
136
- post_install_message:
137
+ post_install_message:
137
138
  rdoc_options: []
138
139
  require_paths:
139
140
  - lib
@@ -149,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
150
  version: '0'
150
151
  requirements: []
151
152
  rubygems_version: 3.1.2
152
- signing_key:
153
+ signing_key:
153
154
  specification_version: 4
154
155
  summary: the official Seats.io Ruby client library
155
156
  test_files: []