seatsio 35.1.0 → 36.0.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: 4e9e68de3cd7eac52d0604ab81e6572bc897bfed4ef71ec40f0ef2bf598d5ef0
4
- data.tar.gz: 999a8991efff73ef71f0c4b0b18bb41d589c0a7aaf7a11784d2f65db5f803b8a
3
+ metadata.gz: 229d0d1752b24b273a977af9c0547f5aba5035756a438b7e7b8f8ca249a38473
4
+ data.tar.gz: a2fdbca2977e4b07e02680cd3c586bc5d360acb7709668a970b4dd12c737cb51
5
5
  SHA512:
6
- metadata.gz: 2b40d67fadfc461bbf774d2ae580b467dc7b81d63e0f245b92c3532a571e061cb0ee73b0e6f3650496c0a3dbbd523756ce70414f3c243014286134143a6af434
7
- data.tar.gz: 06776edd55219aee088bc763bd91e657c0b8c3f72a9358e7d6ca9b6b84fcc1149aaa8f63d9c1401008201511f7ff96870aba496690917e7b3a97fd3310cff304
6
+ metadata.gz: a54ead9e014c28239e158da656661013ae7ca9f5b743c7e5c13c18844884c39c16fe80515389d0e0141f7b596f964da17f1b460fd6b64dcf3301fe51599afe82
7
+ data.tar.gz: a9cc825746a3aa613013efa4aad2ddd03ba8b7a47a1850db032e877d5e5239a64fada00ece19e7504cbcf1c72e40674b1dd74871b457295def38ba841a5646c8
@@ -12,7 +12,7 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: ['2.4']
15
+ ruby-version: ['2.4', '3.0']
16
16
 
17
17
  steps:
18
18
  - uses: actions/checkout@v2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- seatsio (35.1.0)
4
+ seatsio (36.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,7 +19,7 @@ GEM
19
19
  mime-types (3.3.1)
20
20
  mime-types-data (~> 3.2015)
21
21
  mime-types-data (3.2021.0225)
22
- minitest (5.14.4)
22
+ minitest (5.15.0)
23
23
  netrc (0.11.0)
24
24
  public_suffix (4.0.6)
25
25
  rake (13.0.6)
data/README.md CHANGED
@@ -13,13 +13,34 @@ seatsio-ruby follows semver since v23.3.0.
13
13
 
14
14
  You can find a full API reference at https://www.rubydoc.info/gems/seatsio/
15
15
 
16
- ## Examples
16
+ ## Usage
17
+
18
+ ### General instructions
19
+
20
+ To use this library, you'll need to create a `Seatsio::Client`:
21
+
22
+ ```ruby
23
+ require('seatsio')
24
+ client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
25
+ ...
26
+ ```
27
+
28
+ You can find your _workspace secret key_ in the [settings section of the workspace](https://app.seats.io/workspace-settings).
29
+
30
+ The region should correspond to the region of your account:
31
+
32
+ - `Seatsio::Region.EU()`: Europe
33
+ - `Seatsio::Region.NA()`: North-America
34
+ - `Seatsio::Region.SA()`: South-America
35
+ - `Seatsio::Region.OC()`: Oceania
36
+
37
+ If you're unsure about your region, have a look at your [company settings page](https://app.seats.io/company-settings).
17
38
 
18
39
  ### Creating a chart and an event
19
40
 
20
41
  ```ruby
21
42
  require('seatsio')
22
- client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key") # can be found on https://app.seats.io/workspace-settings
43
+ client = Seatsio::Client.new(Seatsio::Region.EU(), "my-workspace-secret-key")
23
44
  chart = client.charts.create
24
45
  event = client.events.create chart_key: chart.key
25
46
  ```
@@ -11,28 +11,54 @@ module Seatsio
11
11
  end
12
12
 
13
13
  def by_label(chart_key, book_whole_tables = nil)
14
- get_chart_report('byLabel', chart_key, book_whole_tables)
14
+ fetch_chart_report('byLabel', chart_key, book_whole_tables)
15
15
  end
16
16
 
17
17
  def by_object_type(chart_key, book_whole_tables = nil)
18
- get_chart_report('byObjectType', chart_key, book_whole_tables)
18
+ fetch_chart_report('byObjectType', chart_key, book_whole_tables)
19
+ end
20
+
21
+ def summary_by_object_type(chart_key, book_whole_tables = nil)
22
+ fetch_summary_report('byObjectType', chart_key, book_whole_tables)
19
23
  end
20
24
 
21
25
  def by_category_key(chart_key, book_whole_tables = nil)
22
- get_chart_report('byCategoryKey', chart_key, book_whole_tables)
26
+ fetch_chart_report('byCategoryKey', chart_key, book_whole_tables)
27
+ end
28
+
29
+ def summary_by_category_key(chart_key, book_whole_tables = nil)
30
+ fetch_summary_report('byCategoryKey', chart_key, book_whole_tables)
23
31
  end
24
32
 
25
33
  def by_category_label(chart_key, book_whole_tables = nil)
26
- get_chart_report('byCategoryLabel', chart_key, book_whole_tables)
34
+ fetch_chart_report('byCategoryLabel', chart_key, book_whole_tables)
35
+ end
36
+
37
+ def summary_by_category_label(chart_key, book_whole_tables = nil)
38
+ fetch_summary_report('byCategoryLabel', chart_key, book_whole_tables)
39
+ end
40
+
41
+ def by_section(chart_key, book_whole_tables = nil)
42
+ fetch_chart_report('bySection', chart_key, book_whole_tables)
43
+ end
44
+
45
+ def summary_by_section(event_key, book_whole_tables = nil)
46
+ fetch_summary_report('bySection', event_key, book_whole_tables)
27
47
  end
28
48
 
29
49
  private
30
50
 
31
- def get_chart_report(report_type, chart_key, book_whole_tables)
51
+ def fetch_chart_report(report_type, chart_key, book_whole_tables)
32
52
  params = book_whole_tables.nil? ? {} : { bookWholeTables: book_whole_tables }
33
53
  url = "reports/charts/#{chart_key}/#{report_type}"
34
54
  body = @http_client.get(url, params)
35
55
  ChartReport.new(body)
36
56
  end
57
+
58
+ def fetch_summary_report(report_type, event_key, book_whole_tables)
59
+ params = book_whole_tables.nil? ? {} : { bookWholeTables: book_whole_tables }
60
+ url = "reports/charts/#{event_key}/#{report_type}/summary"
61
+ @http_client.get(url, params)
62
+ end
37
63
  end
38
64
  end
@@ -22,19 +22,19 @@ module Seatsio
22
22
  @archived = data['archived']
23
23
  @validation = data['validation']
24
24
  @social_distancing_rulesets = data['socialDistancingRulesets'].map {
25
- |key, r| [key, SocialDistancingRuleset.new(r['name'],
26
- number_of_disabled_seats_to_the_sides: r['numberOfDisabledSeatsToTheSides'],
27
- disable_seats_in_front_and_behind: r['disableSeatsInFrontAndBehind'],
28
- disable_diagonal_seats_in_front_and_behind: r['disableDiagonalSeatsInFrontAndBehind'],
29
- number_of_disabled_aisle_seats: r['numberOfDisabledAisleSeats'],
30
- max_group_size: r['maxGroupSize'],
31
- max_occupancy_absolute: r['maxOccupancyAbsolute'],
32
- max_occupancy_percentage: r['maxOccupancyPercentage'],
33
- one_group_per_table: r['oneGroupPerTable'],
34
- fixed_group_layout: r['fixedGroupLayout'],
35
- disabled_seats: r['disabledSeats'],
36
- enabled_seats: r['enabledSeats'],
37
- index: r['index'])]
25
+ |key, r| [key, SocialDistancingRuleset.new(r['name'],
26
+ number_of_disabled_seats_to_the_sides: r['numberOfDisabledSeatsToTheSides'],
27
+ disable_seats_in_front_and_behind: r['disableSeatsInFrontAndBehind'],
28
+ disable_diagonal_seats_in_front_and_behind: r['disableDiagonalSeatsInFrontAndBehind'],
29
+ number_of_disabled_aisle_seats: r['numberOfDisabledAisleSeats'],
30
+ max_group_size: r['maxGroupSize'],
31
+ max_occupancy_absolute: r['maxOccupancyAbsolute'],
32
+ max_occupancy_percentage: r['maxOccupancyPercentage'],
33
+ one_group_per_table: r['oneGroupPerTable'],
34
+ fixed_group_layout: r['fixedGroupLayout'],
35
+ disabled_seats: r['disabledSeats'],
36
+ enabled_seats: r['enabledSeats'],
37
+ index: r['index'])]
38
38
  }.to_h
39
39
  end
40
40
  end
@@ -115,10 +115,10 @@ module Seatsio
115
115
 
116
116
  def == (other)
117
117
  self.key == other.key &&
118
- self.name == other.name &&
119
- self.color == other.color &&
120
- self.index == other.index &&
121
- self.objects == other.objects
118
+ self.name == other.name &&
119
+ self.color == other.color &&
120
+ self.index == other.index &&
121
+ self.objects == other.objects
122
122
  end
123
123
 
124
124
  end
@@ -139,19 +139,46 @@ module Seatsio
139
139
  @created_on = parse_date(data['createdOn'])
140
140
  @updated_on = parse_date(data['updatedOn'])
141
141
  @channels = data['channels'].map {
142
- |d| Channel.new(d['key'], d['name'], d['color'], d['index'], d['objects'])
142
+ |d| Channel.new(d['key'], d['name'], d['color'], d['index'], d['objects'])
143
143
  } if data['channels']
144
144
  @social_distancing_ruleset_key = data['socialDistancingRulesetKey']
145
145
  end
146
146
 
147
+ def is_season
148
+ false
149
+ end
150
+
151
+ def self.from_json(data)
152
+ if data['isSeason']
153
+ Season.new(data)
154
+ else
155
+ Event.new(data)
156
+ end
157
+ end
158
+
147
159
  def self.create_list(list = [])
148
160
  result = []
149
161
 
150
162
  list.each do |item|
151
- result << Event.new(item)
163
+ result << Event.from_json(item)
152
164
  end
153
165
 
154
- return result
166
+ result
167
+ end
168
+ end
169
+
170
+ class Season < Event
171
+
172
+ attr_accessor :partial_season_keys, :events
173
+
174
+ def initialize(data)
175
+ super(data)
176
+ @partial_season_keys = data['partialSeasonKeys']
177
+ @events = data['events'] ? Event.create_list(data['events']) : nil
178
+ end
179
+
180
+ def is_season
181
+ true
155
182
  end
156
183
  end
157
184
 
@@ -521,41 +548,41 @@ module Seatsio
521
548
  end
522
549
 
523
550
  def self.fixed(name, disabled_seats: [], index: 0)
524
- return SocialDistancingRuleset.new(name, index: index, disabled_seats: disabled_seats, fixed_group_layout: true)
551
+ SocialDistancingRuleset.new(name, index: index, disabled_seats: disabled_seats, fixed_group_layout: true)
525
552
  end
526
553
 
527
554
  def self.rule_based(name, number_of_disabled_seats_to_the_sides: 0, disable_seats_in_front_and_behind: false, disable_diagonal_seats_in_front_and_behind: false,
528
555
  number_of_disabled_aisle_seats: 0, max_group_size: 0, max_occupancy_absolute: 0, max_occupancy_percentage: 0, one_group_per_table: false,
529
556
  disabled_seats: [], enabled_seats: [], index: 0)
530
- return SocialDistancingRuleset.new(name,
531
- number_of_disabled_seats_to_the_sides: number_of_disabled_seats_to_the_sides,
532
- disable_seats_in_front_and_behind: disable_seats_in_front_and_behind,
533
- disable_diagonal_seats_in_front_and_behind: disable_diagonal_seats_in_front_and_behind,
534
- number_of_disabled_aisle_seats: number_of_disabled_aisle_seats,
535
- max_group_size: max_group_size,
536
- max_occupancy_absolute: max_occupancy_absolute,
537
- max_occupancy_percentage: max_occupancy_percentage,
538
- one_group_per_table: one_group_per_table,
539
- fixed_group_layout: false,
540
- disabled_seats: disabled_seats,
541
- enabled_seats: enabled_seats,
542
- index: index)
557
+ SocialDistancingRuleset.new(name,
558
+ number_of_disabled_seats_to_the_sides: number_of_disabled_seats_to_the_sides,
559
+ disable_seats_in_front_and_behind: disable_seats_in_front_and_behind,
560
+ disable_diagonal_seats_in_front_and_behind: disable_diagonal_seats_in_front_and_behind,
561
+ number_of_disabled_aisle_seats: number_of_disabled_aisle_seats,
562
+ max_group_size: max_group_size,
563
+ max_occupancy_absolute: max_occupancy_absolute,
564
+ max_occupancy_percentage: max_occupancy_percentage,
565
+ one_group_per_table: one_group_per_table,
566
+ fixed_group_layout: false,
567
+ disabled_seats: disabled_seats,
568
+ enabled_seats: enabled_seats,
569
+ index: index)
543
570
  end
544
571
 
545
572
  def == (other)
546
573
  self.name == other.name &&
547
- self.number_of_disabled_seats_to_the_sides == other.number_of_disabled_seats_to_the_sides &&
548
- self.disable_seats_in_front_and_behind == other.disable_seats_in_front_and_behind &&
549
- self.disable_diagonal_seats_in_front_and_behind == other.disable_diagonal_seats_in_front_and_behind &&
550
- self.number_of_disabled_aisle_seats == other.number_of_disabled_aisle_seats &&
551
- self.max_group_size == other.max_group_size &&
552
- self.max_occupancy_absolute == other.max_occupancy_absolute &&
553
- self.max_occupancy_percentage == other.max_occupancy_percentage &&
554
- self.one_group_per_table == other.one_group_per_table &&
555
- self.fixed_group_layout == other.fixed_group_layout &&
556
- self.disabled_seats == other.disabled_seats &&
557
- self.enabled_seats == other.enabled_seats &&
558
- self.index == other.index
574
+ self.number_of_disabled_seats_to_the_sides == other.number_of_disabled_seats_to_the_sides &&
575
+ self.disable_seats_in_front_and_behind == other.disable_seats_in_front_and_behind &&
576
+ self.disable_diagonal_seats_in_front_and_behind == other.disable_diagonal_seats_in_front_and_behind &&
577
+ self.number_of_disabled_aisle_seats == other.number_of_disabled_aisle_seats &&
578
+ self.max_group_size == other.max_group_size &&
579
+ self.max_occupancy_absolute == other.max_occupancy_absolute &&
580
+ self.max_occupancy_percentage == other.max_occupancy_percentage &&
581
+ self.one_group_per_table == other.one_group_per_table &&
582
+ self.fixed_group_layout == other.fixed_group_layout &&
583
+ self.disabled_seats == other.disabled_seats &&
584
+ self.enabled_seats == other.enabled_seats &&
585
+ self.index == other.index
559
586
  end
560
587
  end
561
588
 
@@ -4,7 +4,6 @@ require "seatsio/httpClient"
4
4
  require "seatsio/domain"
5
5
  require "json"
6
6
  require "cgi"
7
- require "seatsio/domain"
8
7
  require "seatsio/events/change_object_status_request"
9
8
  require "seatsio/events/change_best_available_object_status_request"
10
9
 
@@ -108,7 +107,7 @@ module Seatsio
108
107
 
109
108
  def retrieve(key:)
110
109
  response = @http_client.get("events/#{key}")
111
- Event.new(response)
110
+ Event.from_json(response)
112
111
  end
113
112
 
114
113
  def list
@@ -19,7 +19,7 @@ module Seatsio
19
19
  @first_page = false
20
20
  end
21
21
 
22
- def each(start = 0)
22
+ def each(start = 0, &block)
23
23
  return to_enum(:each, start) unless block_given?
24
24
 
25
25
  Array(@collection[start..-1]).each do |element|
@@ -30,7 +30,7 @@ module Seatsio
30
30
 
31
31
  start = [@collection.size, start].max
32
32
  fetch_next_page
33
- each(start, &Proc.new)
33
+ each(start, &block)
34
34
  end
35
35
 
36
36
  def set_query_param(key, value)
@@ -85,7 +85,7 @@ module Seatsio
85
85
  items = response['items']
86
86
  parsed_items = []
87
87
 
88
- items.each {|item| parsed_items << @cls.new(item)}
88
+ items.each {|item| parsed_items << (@cls.respond_to?(:from_json) ? @cls.from_json(item) : @cls.new(item))}
89
89
 
90
90
  @collection += parsed_items
91
91
  set_query_param(:start_after_id, items.last['id']) unless last?
@@ -0,0 +1,77 @@
1
+ require 'seatsio/exception'
2
+ require 'base64'
3
+ require 'seatsio/httpClient'
4
+ require 'seatsio/domain'
5
+ require 'json'
6
+ require 'cgi'
7
+
8
+ module Seatsio
9
+
10
+ class SeasonsClient
11
+ def initialize(http_client, seatsio_client)
12
+ @http_client = http_client
13
+ @seatsio_client = seatsio_client
14
+ end
15
+
16
+ def create(chart_key:, key: nil, number_of_events: nil, event_keys: nil,
17
+ table_booking_config: nil, social_distancing_ruleset_key: nil)
18
+ request = build_create_season_request(chart_key: chart_key, key: key, number_of_events: number_of_events, event_keys: event_keys,
19
+ table_booking_config: table_booking_config, social_distancing_ruleset_key: social_distancing_ruleset_key)
20
+ response = @http_client.post('seasons', request)
21
+ Season.new(response)
22
+ end
23
+
24
+ def create_partial_season(top_level_season_key:, partial_season_key: nil, event_keys: nil)
25
+ request = {}
26
+ request['key'] = partial_season_key if partial_season_key
27
+ request['eventKeys'] = event_keys if event_keys
28
+ response = @http_client.post("/seasons/#{top_level_season_key}/partial-seasons", request)
29
+ Season.new(response)
30
+ end
31
+
32
+ def retrieve(key:)
33
+ @seatsio_client.events.retrieve(key: key)
34
+ end
35
+
36
+ def create_events(key:, number_of_events: nil, event_keys: nil)
37
+ request = {}
38
+ request['eventKeys'] = event_keys if event_keys
39
+ request['numberOfEvents'] = number_of_events if number_of_events
40
+ response = @http_client.post("/seasons/#{key}/actions/create-events", request)
41
+ Season.new(response)
42
+ end
43
+
44
+ def add_events_to_partial_season(top_level_season_key:, partial_season_key:, event_keys:)
45
+ request = {}
46
+ request['eventKeys'] = event_keys
47
+ response = @http_client.post("/seasons/#{top_level_season_key}/partial-seasons/#{partial_season_key}/actions/add-events", request)
48
+ Season.new(response)
49
+ end
50
+
51
+ def remove_event_from_partial_season(top_level_season_key:, partial_season_key:, event_key:)
52
+ response = @http_client.delete("/seasons/#{top_level_season_key}/partial-seasons/#{partial_season_key}/events/#{event_key}")
53
+ Season.new(response)
54
+ end
55
+
56
+ private
57
+
58
+ def build_create_season_request(chart_key: nil, key: nil, number_of_events: nil, event_keys: nil, table_booking_config: nil, social_distancing_ruleset_key: nil)
59
+ request = {}
60
+ request['chartKey'] = chart_key if chart_key
61
+ request['key'] = key if key
62
+ request['numberOfEvents'] = number_of_events if number_of_events
63
+ request['eventKeys'] = event_keys if event_keys
64
+ request['tableBookingConfig'] = table_booking_config_to_request(table_booking_config) if table_booking_config != nil
65
+ request['socialDistancingRulesetKey'] = social_distancing_ruleset_key if social_distancing_ruleset_key != nil
66
+ request
67
+ end
68
+
69
+ def table_booking_config_to_request(table_booking_config)
70
+ request = {}
71
+ request['mode'] = table_booking_config.mode
72
+ request['tables'] = table_booking_config.tables if table_booking_config.tables != nil
73
+ request
74
+ end
75
+
76
+ end
77
+ end
@@ -1,3 +1,3 @@
1
1
  module Seatsio
2
- VERSION = "35.1.0"
2
+ VERSION = "36.0.0"
3
3
  end
@@ -4,7 +4,6 @@ require "seatsio/httpClient"
4
4
  require "seatsio/domain"
5
5
  require "json"
6
6
  require "cgi"
7
- require "seatsio/domain"
8
7
 
9
8
  module Seatsio
10
9
  class WorkspacesClient
data/lib/seatsio.rb CHANGED
@@ -3,6 +3,7 @@ require 'seatsio/charts'
3
3
  require 'seatsio/subaccounts'
4
4
  require 'seatsio/workspaces'
5
5
  require 'seatsio/events'
6
+ require 'seatsio/seasons'
6
7
  require 'seatsio/hold_tokens'
7
8
  require 'seatsio/chart_reports'
8
9
  require 'seatsio/event_reports'
@@ -10,7 +11,7 @@ require 'seatsio/usage_reports'
10
11
 
11
12
  module Seatsio
12
13
  class Client
13
- attr_reader :charts, :subaccounts, :workspaces, :events,
14
+ attr_reader :charts, :subaccounts, :workspaces, :events, :seasons,
14
15
  :hold_tokens, :chart_reports, :event_reports, :usage_reports
15
16
 
16
17
  def initialize(region, secret_key, workspace_key = nil, max_retries = 5)
@@ -20,15 +21,14 @@ module Seatsio
20
21
  @subaccounts = SubaccountsClient.new(@http_client)
21
22
  @workspaces = WorkspacesClient.new(@http_client)
22
23
  @events = EventsClient.new(@http_client)
24
+ @seasons = SeasonsClient.new(@http_client, self)
23
25
  @hold_tokens = HoldTokensClient.new(@http_client)
24
26
  @chart_reports = ChartReportsClient.new(@http_client)
25
27
  @event_reports = EventReportsClient.new(@http_client)
26
28
  @usage_reports = UsageReportsClient.new(@http_client)
27
29
  end
28
-
29
30
  end
30
31
 
31
-
32
32
  class Region
33
33
  attr_reader :url
34
34
 
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: 35.1.0
4
+ version: 36.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-12-16 00:00:00.000000000 Z
11
+ date: 2022-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,6 +124,7 @@ files:
124
124
  - lib/seatsio/hold_tokens.rb
125
125
  - lib/seatsio/httpClient.rb
126
126
  - lib/seatsio/pagination/cursor.rb
127
+ - lib/seatsio/seasons.rb
127
128
  - lib/seatsio/subaccounts.rb
128
129
  - lib/seatsio/usage_reports.rb
129
130
  - lib/seatsio/util.rb