useless-wait-list 0.0.4 → 0.0.5

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
  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