useless-wait-list 0.0.4 → 0.0.5

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
  SHA1:
3
- metadata.gz: 166323991a40e1597674dafc34683bed1f5b8c55
4
- data.tar.gz: d6213514a0bb186ebc019c7cd66f005c715a0b9f
3
+ metadata.gz: 41d0880acb1ceacb594266aa4a3a7e4dbb20079c
4
+ data.tar.gz: 4134f32eeafbcc4741d6082dd360794c12c58bff
5
5
  SHA512:
6
- metadata.gz: 1f2f4d3ff35dbfd64cd6246668775f96be766e9e308159d34b1f0c8ab8abbbf521c8c317cbb6fea110e1bb558eaca33f9c408f4606ebd0e37ef82b0ea68fdd3e
7
- data.tar.gz: a4b34eab291f3631d962736181c494b60808fec1c60dcda1b0abdc0d76991dca1d769a6ca02fad2b8ec8a61f0079b3dfa56a08d47b6c3f8606422f44622e85be
6
+ metadata.gz: 26bd0effc0fecbece82de42ff0b6dc536e31b39a0023e3e1fe631acf32b6939433fcc6bd9fee9d17f44a99efe6da7329b8b15991102364be1dabc410d1b031f9
7
+ data.tar.gz: 2a78d481f0e0cbf6c46d3bb76c3a6ce7e5045e3ff6d5cc274d4abb4252428549236ad26d04067dd04c4e5fb413149f96df7c2ccf1a0a9696b9e5abb9af4f3ca7
@@ -14,74 +14,72 @@ module Useless
14
14
  implementation 'Pending', 'Kevin Hyland'
15
15
 
16
16
  description <<-DESC
17
- The **Wait List API** exposes a service that improves the wait list
18
- experience for both restaurants and patrons. It was initially motivated
19
- by a desire, as patrons, to browse and add ourselves to wait lists. It
20
- also improves the process of managing wait lists for restaurants.
21
-
22
- ### Restaurant
23
-
24
- The top-level resource is the **restaurant**, which consists of a place
25
- (from a supported place API, e.g. Foursquare), a group of users, and
26
- some wait lists.
27
-
28
- The users associated with the restaurant represent the staff and are
29
- able to manage the restaurant's wait lists, i.e. create or cancel
30
- reservations on behalf of other users or mark reservations as "seated",
31
- "no show" or "bumped".
17
+ The **Wait List API** implements a new approach to filling a
18
+ restaurant's open tables by presenting them to potential patrons in
19
+ real time and allowing them to instantly make reservations.
32
20
 
33
21
  ### Wait List
34
22
 
35
- The **wait list** is the primary resource. A wait list belongs to a
36
- restaurant, has an ordered list of reservations, along with the
37
- following attributes:
23
+ The API's primary resource is, of course, the **wait list**. A wait list
24
+ is a simple construct that represents open tables in a restaurant and
25
+ serves two functions:
38
26
 
39
- * _table_size_ - the number of people who can be seated at this
40
- wait list's tables. A restaurant should have a wait list per
41
- available table size per dining service.
27
+ 1. Exposes the tables to patrons via search.
42
28
 
43
- * _reservations_start_ - when reservations can start being created
44
- for this wait list. Once this time has passed, the wait list is
45
- "open".
29
+ 2. Coordinates reservations for the tables.
46
30
 
47
- * _seating_start_ - when the first reservation on this wait list
48
- will be seated. Once this time has passed, the wait list is
49
- "active".
31
+ A wait list is associated with a single table size. It maintains an
32
+ ordered list of reservations where the front of the list is the next
33
+ to be seated.
50
34
 
51
- A wait list can be closed manually or automatically (based upon some
52
- criteria, e.g. a reservation threshold). Once closed, reservations can
53
- no longer be created for the wait list, and it will no longer show up in
54
- search results.
35
+ Wait lists can be created in an ad hoc manner (e.g., when another
36
+ reservation is a no show), or according to a regular schedule (e.g., a
37
+ wait list per table size per night).
38
+
39
+ A wait list can be either _open_ or _closed_. When open, patrons can
40
+ add reservations to the wait list. When closed, they cannot. A wait list
41
+ can be closed either manually or according to some criteria. Once
42
+ closed, the wait list will no longer appear in search results.
55
43
 
56
44
  ### Reservation
57
45
 
58
46
  A **reservation** represents a patron's position on a wait list. A
59
47
  reservation can have one of five states:
60
48
 
61
- * _waiting_ - the patron has not yet been seated, or marked as a no
62
- show.
49
+ * _waiting_ - the patron has not yet been seated or marked as a no show.
63
50
 
64
51
  * _cancelled_ - the patron has yet to be seated, but has removed
65
- himself from the waitlist.
52
+ himself from the wait list.
66
53
 
67
54
  * _seated_ - the patron has been seated at his table.
68
55
 
69
56
  * _no show_ - the patron did not show up for the meal.
70
57
 
71
58
  * _bumped_ - the patron was on the wait list, but the restuarant
72
- was unable to seat him, probably due to the end of service.
59
+ was unable to seat him.
73
60
 
74
61
  A patron can create a reservation for himself on any open wait
75
- list, as long as he does not already have a reservation on another
76
- wait list at "around the same time".
62
+ list, as long as he does not already have a "conflicting" reservation on
63
+ another wait list.
77
64
 
78
65
  A patron can also remove himself from a wait list, causing his
79
66
  reservation to be marked as either "cancelled" or "no show".
67
+
68
+ ### Restaurant
69
+
70
+ A wait list belongs to a **restaurant**, which consists of a place
71
+ (from a supported place API, e.g. Foursquare), a group of users, and
72
+ some wait lists.
73
+
74
+ The users associated with the restaurant represent the staff and are
75
+ able to manage the restaurant's wait lists, i.e. create or cancel
76
+ reservations on behalf of patrons or mark reservations as "seated",
77
+ "no show" or "bumped".
80
78
  DESC
81
79
  end
82
80
 
83
81
  doc.get '/wait_lists' do
84
- description 'Search for wait lists by geolocation and party size'
82
+ description 'Search for wait lists by location and party size'
85
83
 
86
84
  authentication_required false
87
85
 
@@ -108,9 +106,9 @@ module Useless
108
106
  attribute 'latitude', 'The latitude of the restaurant', type: 'number'
109
107
  attribute 'latitude', 'The longitude of the restaurant', type: 'number'
110
108
  end
111
- attribute 'reservations_start', 'The time that reservations can be created for this wait list', type: 'timestamp'
112
- attribute 'estimated_seating_time', 'The time at which the next available reservation on the ' +
113
- 'wait list is estimated to be seated', type: 'timestamp'
109
+ attribute 'open_at', 'The time that reservations can be created for this wait list', type: 'timestamp'
110
+ attribute 'estimated_seated_at', 'The estimated time that the next reservation added ' +
111
+ 'to the wait list will be seated', type: 'timestamp'
114
112
  end
115
113
  end
116
114
  end
@@ -139,15 +137,15 @@ module Useless
139
137
  attribute 'table_size', 'The party size that can be accomodated by the tables on this wait list',
140
138
  type: 'integer', required: true
141
139
  attribute 'table_quantity', 'The number of tables available on this wait list. ' +
142
- 'This number is used to determine the estimated_seating_time', type: 'integer', required: false
143
- attribute 'seating_start', 'When the first resevation will be seated. Also used to determine the ' +
144
- 'estimated_seating_time', type: 'timestamp', required: false, default: '[now]'
145
- attribute 'reservations_start', 'When reservations will be accepted for this wait list',
140
+ 'This number is used to determine the estimated_seated_at', type: 'integer', required: false
141
+ attribute 'first_seated_at', 'When the first reservation will be seated. Also used to determine the ' +
142
+ 'estimated_seated_at', type: 'timestamp', required: false, default: '[now]'
143
+ attribute 'open_at', 'When reservations will be accepted for this wait list',
146
144
  type: 'timestamp', required: false, default: '[now]'
147
- attribute 'reservations_end', 'When this wait list close and stop accepting reservations',
145
+ attribute 'closed_at', 'When this wait list is automatically closed',
148
146
  type: 'timestamp', required: false
149
147
  attribute 'maximum_reservations', 'The total number of reservations that will be accepted before ' +
150
- 'the wait list closes', type: 'integer', required: false
148
+ 'the wait list is automatically closed', type: 'integer', required: false
151
149
  end
152
150
 
153
151
  response 201, 'The wait list was successfully created' do
@@ -155,20 +153,73 @@ module Useless
155
153
  end
156
154
 
157
155
  response 401, 'Request must be authenticated'
156
+ response 401, 'Invalid access token'
158
157
  response 401, 'The user is not authorized to manage the specified restaurant'
159
158
  response 422, 'restaurant_id or table_size was omitted'
160
159
  response 404, 'The specified restaurant_id could not be found'
161
160
  response 422, 'Invalid table_size - must be an integer greater than zero'
162
161
  response 422, 'Invalid table_quantity - must be an integer greater than zero'
163
- response 422, 'Invalid seating_start - must be a timestamp in ISO 8601 format'
164
- response 422, 'Invalid reservations_start - must be a timestamp in ISO 8601 format'
165
- response 422, 'Invalid reservations_end - must be a timestamp in ISO 8601 format, ' +
166
- 'greater than reservation_start'
162
+ response 422, 'Invalid first_seated_at - must be a timestamp in ISO 8601 format'
163
+ response 422, 'Invalid open_at - must be a timestamp in ISO 8601 format'
164
+ response 422, 'Invalid closed_at - must be a timestamp in ISO 8601 format, ' +
165
+ 'greater than open_at'
167
166
  response 422, 'Invalid maximum_reservations - must be an integer greater than zero'
168
167
  end
169
168
 
170
169
  post '/wait_lists' do
171
170
  [501, 'Not yet implemented']
172
171
  end
172
+
173
+ doc.post '/wait_lists/:id/reservations' do
174
+ description 'Add a reservation to a wait list'
175
+
176
+ authentication_required true
177
+
178
+ response 201, 'Your reservation has been succesfully added to the wait list' do
179
+ body do
180
+ attribute 'id', 'The unique ID of this reservation'
181
+ attribute 'restaurant', 'The restaurant associated with the wait list', type: 'object' do
182
+ attribute 'id', 'The unique ID of the restaurant', type: 'string'
183
+ attribute 'name', 'The name of the restaurant', type: 'string'
184
+ attribute 'latitude', 'The latitude of the restaurant', type: 'number'
185
+ attribute 'latitude', 'The longitude of the restaurant', type: 'number'
186
+ end
187
+ attribute 'position', 'Your position on the wait list'
188
+ attribute 'estimated_seated_at', 'The time at which you are expected to be seated for ' +
189
+ 'this reservation', type: 'timestamp'
190
+ end
191
+ end
192
+
193
+ response 401, 'Request must be authenticated'
194
+ response 401, 'Invalid access token'
195
+ response 404, 'The specified wait list ID could not be found'
196
+ response 422, 'Reservation could not be added due to another, conflicting reservation'
197
+ response 422, 'Reservation could not be added because the wait list is closed'
198
+ end
199
+
200
+ post '/wait_lists/:id/reservations' do
201
+ [501, 'Not yet implemented']
202
+ end
203
+
204
+ doc.put '/reservations/:id/state' do
205
+ description 'Set the state of a reservation'
206
+
207
+ authentication_required true
208
+
209
+ body do
210
+ content_type 'application/json'
211
+ attribute 'state', 'One of \'waiting\', \'cancelled\', \'seated\', \'no_show\' or \'bumped\''
212
+ end
213
+
214
+ response 201, 'The state of the reservation was successfully set'
215
+ response 401, 'Request must be authenticated'
216
+ response 401, 'Invalid access token'
217
+ response 401, 'You cannot set a reservation\'s state unless you are on the wait list\'s ' +
218
+ 'restaurant\'s staff'
219
+ response 404, 'The specified wait list ID could not be found'
220
+ response 422, 'The value of state must be one of \'waiting\', \'cancelled\', \'seated\', ' +
221
+ '\'no_show\' or \'bumped\''
222
+ response 422, 'The reservation state could not be updated because the wait list is closed'
223
+ end
173
224
  end
174
225
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'useless-wait-list'
7
- spec.version = '0.0.4'
7
+ spec.version = '0.0.5'
8
8
  spec.authors = ['Kevin Hyland']
9
9
  spec.email = ['khy@me.com']
10
10
  spec.summary = 'For restaurants that don\'t take reservations'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: useless-wait-list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Hyland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-25 00:00:00.000000000 Z
11
+ date: 2013-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra