seatsio 31.0.0 → 32.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 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: []