skytab_sandbox_simulator 0.1.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 +7 -0
- data/Gemfile +10 -0
- data/bin/simulate +433 -0
- data/lib/skytab_sandbox_simulator/configuration.rb +205 -0
- data/lib/skytab_sandbox_simulator/data/bar_nightclub/categories.json +9 -0
- data/lib/skytab_sandbox_simulator/data/bar_nightclub/items.json +28 -0
- data/lib/skytab_sandbox_simulator/data/bar_nightclub/tenders.json +19 -0
- data/lib/skytab_sandbox_simulator/data/cafe_bakery/categories.json +9 -0
- data/lib/skytab_sandbox_simulator/data/cafe_bakery/items.json +30 -0
- data/lib/skytab_sandbox_simulator/data/cafe_bakery/tenders.json +17 -0
- data/lib/skytab_sandbox_simulator/data/fine_dining/categories.json +9 -0
- data/lib/skytab_sandbox_simulator/data/fine_dining/items.json +30 -0
- data/lib/skytab_sandbox_simulator/data/fine_dining/tenders.json +18 -0
- data/lib/skytab_sandbox_simulator/data/pizzeria/categories.json +9 -0
- data/lib/skytab_sandbox_simulator/data/pizzeria/items.json +28 -0
- data/lib/skytab_sandbox_simulator/data/pizzeria/tenders.json +18 -0
- data/lib/skytab_sandbox_simulator/data/restaurant/categories.json +44 -0
- data/lib/skytab_sandbox_simulator/data/restaurant/items.json +59 -0
- data/lib/skytab_sandbox_simulator/data/restaurant/tenders.json +22 -0
- data/lib/skytab_sandbox_simulator/database.rb +192 -0
- data/lib/skytab_sandbox_simulator/db/factories/business_types.rb +102 -0
- data/lib/skytab_sandbox_simulator/db/factories/categories.rb +243 -0
- data/lib/skytab_sandbox_simulator/db/factories/items.rb +976 -0
- data/lib/skytab_sandbox_simulator/db/factories/simulated_orders.rb +120 -0
- data/lib/skytab_sandbox_simulator/db/factories/simulated_payments.rb +75 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000000_enable_pgcrypto.rb +7 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000001_create_business_types.rb +18 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000002_create_categories.rb +18 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000003_create_items.rb +23 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000004_create_simulated_orders.rb +35 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000005_create_simulated_payments.rb +26 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000006_create_api_requests.rb +27 -0
- data/lib/skytab_sandbox_simulator/db/migrate/20260316000007_create_daily_summaries.rb +24 -0
- data/lib/skytab_sandbox_simulator/generators/data_loader.rb +125 -0
- data/lib/skytab_sandbox_simulator/generators/entity_generator.rb +107 -0
- data/lib/skytab_sandbox_simulator/generators/order_generator.rb +390 -0
- data/lib/skytab_sandbox_simulator/models/api_request.rb +43 -0
- data/lib/skytab_sandbox_simulator/models/business_type.rb +25 -0
- data/lib/skytab_sandbox_simulator/models/category.rb +17 -0
- data/lib/skytab_sandbox_simulator/models/daily_summary.rb +67 -0
- data/lib/skytab_sandbox_simulator/models/item.rb +32 -0
- data/lib/skytab_sandbox_simulator/models/record.rb +14 -0
- data/lib/skytab_sandbox_simulator/models/simulated_order.rb +40 -0
- data/lib/skytab_sandbox_simulator/models/simulated_payment.rb +28 -0
- data/lib/skytab_sandbox_simulator/seeder.rb +167 -0
- data/lib/skytab_sandbox_simulator/services/base_service.rb +227 -0
- data/lib/skytab_sandbox_simulator/services/skytab/catalog_service.rb +130 -0
- data/lib/skytab_sandbox_simulator/services/skytab/location_service.rb +54 -0
- data/lib/skytab_sandbox_simulator/services/skytab/order_service.rb +139 -0
- data/lib/skytab_sandbox_simulator/services/skytab/payment_service.rb +94 -0
- data/lib/skytab_sandbox_simulator/services/skytab/service_manager.rb +62 -0
- data/lib/skytab_sandbox_simulator/version.rb +5 -0
- data/lib/skytab_sandbox_simulator.rb +45 -0
- metadata +305 -0
|
@@ -0,0 +1,976 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Item traits across 5 business types.
|
|
4
|
+
# Each trait sets name, price (cents), sku, and associates with the correct
|
|
5
|
+
# category (which in turn associates with the correct business type).
|
|
6
|
+
|
|
7
|
+
FactoryBot.define do
|
|
8
|
+
factory :item, class: "SkytabSandboxSimulator::Models::Item" do
|
|
9
|
+
association :category
|
|
10
|
+
sequence(:name) { |n| "Item #{n}" }
|
|
11
|
+
price { 999 } # cents
|
|
12
|
+
active { true }
|
|
13
|
+
variants { [] }
|
|
14
|
+
metadata { {} }
|
|
15
|
+
|
|
16
|
+
# ═══════════════════════════════════════════════════════════
|
|
17
|
+
# RESTAURANT (8 categories, ~50 items)
|
|
18
|
+
# ═══════════════════════════════════════════════════════════
|
|
19
|
+
|
|
20
|
+
# ── Appetizers ─────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
trait :buffalo_wings do
|
|
23
|
+
name { "Buffalo Wings" }
|
|
24
|
+
price { 1299 }
|
|
25
|
+
sku { "REST-APP-001" }
|
|
26
|
+
association :category, factory: [:category, :appetizers]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
trait :mozzarella_sticks do
|
|
30
|
+
name { "Mozzarella Sticks" }
|
|
31
|
+
price { 999 }
|
|
32
|
+
sku { "REST-APP-002" }
|
|
33
|
+
association :category, factory: [:category, :appetizers]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
trait :loaded_nachos do
|
|
37
|
+
name { "Loaded Nachos" }
|
|
38
|
+
price { 1199 }
|
|
39
|
+
sku { "REST-APP-003" }
|
|
40
|
+
association :category, factory: [:category, :appetizers]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
trait :spinach_artichoke_dip do
|
|
44
|
+
name { "Spinach Artichoke Dip" }
|
|
45
|
+
price { 1099 }
|
|
46
|
+
sku { "REST-APP-004" }
|
|
47
|
+
association :category, factory: [:category, :appetizers]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
trait :calamari do
|
|
51
|
+
name { "Calamari" }
|
|
52
|
+
price { 1399 }
|
|
53
|
+
sku { "REST-APP-005" }
|
|
54
|
+
association :category, factory: [:category, :appetizers]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
trait :bruschetta do
|
|
58
|
+
name { "Bruschetta" }
|
|
59
|
+
price { 999 }
|
|
60
|
+
sku { "REST-APP-006" }
|
|
61
|
+
association :category, factory: [:category, :appetizers]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
trait :shrimp_cocktail do
|
|
65
|
+
name { "Shrimp Cocktail" }
|
|
66
|
+
price { 1599 }
|
|
67
|
+
sku { "REST-APP-007" }
|
|
68
|
+
association :category, factory: [:category, :appetizers]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# ── Entrees ──────────────────────────────────────────────
|
|
72
|
+
|
|
73
|
+
trait :classic_burger do
|
|
74
|
+
name { "Classic Burger" }
|
|
75
|
+
price { 1499 }
|
|
76
|
+
sku { "REST-ENT-001" }
|
|
77
|
+
association :category, factory: [:category, :entrees]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
trait :grilled_salmon do
|
|
81
|
+
name { "Grilled Salmon" }
|
|
82
|
+
price { 2199 }
|
|
83
|
+
sku { "REST-ENT-002" }
|
|
84
|
+
association :category, factory: [:category, :entrees]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
trait :ny_strip_steak do
|
|
88
|
+
name { "NY Strip Steak" }
|
|
89
|
+
price { 2899 }
|
|
90
|
+
sku { "REST-ENT-003" }
|
|
91
|
+
association :category, factory: [:category, :entrees]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
trait :chicken_parmesan do
|
|
95
|
+
name { "Chicken Parmesan" }
|
|
96
|
+
price { 1899 }
|
|
97
|
+
sku { "REST-ENT-004" }
|
|
98
|
+
association :category, factory: [:category, :entrees]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
trait :fettuccine_alfredo do
|
|
102
|
+
name { "Fettuccine Alfredo" }
|
|
103
|
+
price { 1599 }
|
|
104
|
+
sku { "REST-ENT-005" }
|
|
105
|
+
association :category, factory: [:category, :entrees]
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
trait :fish_and_chips do
|
|
109
|
+
name { "Fish and Chips" }
|
|
110
|
+
price { 1699 }
|
|
111
|
+
sku { "REST-ENT-006" }
|
|
112
|
+
association :category, factory: [:category, :entrees]
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
trait :bbq_ribs do
|
|
116
|
+
name { "BBQ Ribs" }
|
|
117
|
+
price { 2399 }
|
|
118
|
+
sku { "REST-ENT-007" }
|
|
119
|
+
association :category, factory: [:category, :entrees]
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
trait :mushroom_risotto do
|
|
123
|
+
name { "Mushroom Risotto" }
|
|
124
|
+
price { 1799 }
|
|
125
|
+
sku { "REST-ENT-008" }
|
|
126
|
+
association :category, factory: [:category, :entrees]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
trait :shrimp_scampi do
|
|
130
|
+
name { "Shrimp Scampi" }
|
|
131
|
+
price { 2099 }
|
|
132
|
+
sku { "REST-ENT-009" }
|
|
133
|
+
association :category, factory: [:category, :entrees]
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# ── Sides ────────────────────────────────────────────────
|
|
137
|
+
|
|
138
|
+
trait :french_fries do
|
|
139
|
+
name { "French Fries" }
|
|
140
|
+
price { 499 }
|
|
141
|
+
sku { "REST-SID-001" }
|
|
142
|
+
association :category, factory: [:category, :sides]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
trait :sweet_potato_fries do
|
|
146
|
+
name { "Sweet Potato Fries" }
|
|
147
|
+
price { 599 }
|
|
148
|
+
sku { "REST-SID-002" }
|
|
149
|
+
association :category, factory: [:category, :sides]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
trait :onion_rings do
|
|
153
|
+
name { "Onion Rings" }
|
|
154
|
+
price { 549 }
|
|
155
|
+
sku { "REST-SID-003" }
|
|
156
|
+
association :category, factory: [:category, :sides]
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
trait :coleslaw do
|
|
160
|
+
name { "Coleslaw" }
|
|
161
|
+
price { 399 }
|
|
162
|
+
sku { "REST-SID-004" }
|
|
163
|
+
association :category, factory: [:category, :sides]
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
trait :mashed_potatoes do
|
|
167
|
+
name { "Mashed Potatoes" }
|
|
168
|
+
price { 499 }
|
|
169
|
+
sku { "REST-SID-005" }
|
|
170
|
+
association :category, factory: [:category, :sides]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
trait :steamed_vegetables do
|
|
174
|
+
name { "Steamed Vegetables" }
|
|
175
|
+
price { 449 }
|
|
176
|
+
sku { "REST-SID-006" }
|
|
177
|
+
association :category, factory: [:category, :sides]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
trait :garlic_bread do
|
|
181
|
+
name { "Garlic Bread" }
|
|
182
|
+
price { 449 }
|
|
183
|
+
sku { "REST-SID-007" }
|
|
184
|
+
association :category, factory: [:category, :sides]
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# ── Desserts ─────────────────────────────────────────────
|
|
188
|
+
|
|
189
|
+
trait :chocolate_brownie do
|
|
190
|
+
name { "Chocolate Brownie" }
|
|
191
|
+
price { 699 }
|
|
192
|
+
sku { "REST-DES-001" }
|
|
193
|
+
association :category, factory: [:category, :desserts]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
trait :ny_cheesecake do
|
|
197
|
+
name { "New York Cheesecake" }
|
|
198
|
+
price { 799 }
|
|
199
|
+
sku { "REST-DES-002" }
|
|
200
|
+
association :category, factory: [:category, :desserts]
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
trait :apple_pie do
|
|
204
|
+
name { "Apple Pie" }
|
|
205
|
+
price { 749 }
|
|
206
|
+
sku { "REST-DES-003" }
|
|
207
|
+
association :category, factory: [:category, :desserts]
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
trait :tiramisu do
|
|
211
|
+
name { "Tiramisu" }
|
|
212
|
+
price { 899 }
|
|
213
|
+
sku { "REST-DES-004" }
|
|
214
|
+
association :category, factory: [:category, :desserts]
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
trait :creme_brulee do
|
|
218
|
+
name { "Creme Brulee" }
|
|
219
|
+
price { 949 }
|
|
220
|
+
sku { "REST-DES-005" }
|
|
221
|
+
association :category, factory: [:category, :desserts]
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# ── Beverages ────────────────────────────────────────────
|
|
225
|
+
|
|
226
|
+
trait :soft_drink do
|
|
227
|
+
name { "Soft Drink" }
|
|
228
|
+
price { 299 }
|
|
229
|
+
sku { "REST-BEV-001" }
|
|
230
|
+
association :category, factory: [:category, :beverages]
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
trait :iced_tea do
|
|
234
|
+
name { "Iced Tea" }
|
|
235
|
+
price { 299 }
|
|
236
|
+
sku { "REST-BEV-002" }
|
|
237
|
+
association :category, factory: [:category, :beverages]
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
trait :lemonade do
|
|
241
|
+
name { "Lemonade" }
|
|
242
|
+
price { 349 }
|
|
243
|
+
sku { "REST-BEV-003" }
|
|
244
|
+
association :category, factory: [:category, :beverages]
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
trait :coffee do
|
|
248
|
+
name { "Coffee" }
|
|
249
|
+
price { 349 }
|
|
250
|
+
sku { "REST-BEV-004" }
|
|
251
|
+
association :category, factory: [:category, :beverages]
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
trait :hot_tea do
|
|
255
|
+
name { "Hot Tea" }
|
|
256
|
+
price { 299 }
|
|
257
|
+
sku { "REST-BEV-005" }
|
|
258
|
+
association :category, factory: [:category, :beverages]
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
trait :sparkling_water do
|
|
262
|
+
name { "Sparkling Water" }
|
|
263
|
+
price { 349 }
|
|
264
|
+
sku { "REST-BEV-006" }
|
|
265
|
+
association :category, factory: [:category, :beverages]
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
trait :fresh_juice do
|
|
269
|
+
name { "Fresh Juice" }
|
|
270
|
+
price { 499 }
|
|
271
|
+
sku { "REST-BEV-007" }
|
|
272
|
+
association :category, factory: [:category, :beverages]
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# ── Alcohol ──────────────────────────────────────────────
|
|
276
|
+
|
|
277
|
+
trait :draft_beer do
|
|
278
|
+
name { "Draft Beer" }
|
|
279
|
+
price { 599 }
|
|
280
|
+
sku { "REST-ALC-001" }
|
|
281
|
+
association :category, factory: [:category, :alcohol]
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
trait :domestic_beer do
|
|
285
|
+
name { "Domestic Beer" }
|
|
286
|
+
price { 499 }
|
|
287
|
+
sku { "REST-ALC-002" }
|
|
288
|
+
association :category, factory: [:category, :alcohol]
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
trait :import_beer do
|
|
292
|
+
name { "Import Beer" }
|
|
293
|
+
price { 649 }
|
|
294
|
+
sku { "REST-ALC-003" }
|
|
295
|
+
association :category, factory: [:category, :alcohol]
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
trait :house_wine do
|
|
299
|
+
name { "House Wine" }
|
|
300
|
+
price { 799 }
|
|
301
|
+
sku { "REST-ALC-004" }
|
|
302
|
+
association :category, factory: [:category, :alcohol]
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
trait :margarita do
|
|
306
|
+
name { "Margarita" }
|
|
307
|
+
price { 999 }
|
|
308
|
+
sku { "REST-ALC-005" }
|
|
309
|
+
association :category, factory: [:category, :alcohol]
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
trait :old_fashioned do
|
|
313
|
+
name { "Old Fashioned" }
|
|
314
|
+
price { 1299 }
|
|
315
|
+
sku { "REST-ALC-006" }
|
|
316
|
+
association :category, factory: [:category, :alcohol]
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# ── Kids Menu ────────────────────────────────────────────
|
|
320
|
+
|
|
321
|
+
trait :chicken_tenders do
|
|
322
|
+
name { "Chicken Tenders" }
|
|
323
|
+
price { 799 }
|
|
324
|
+
sku { "REST-KID-001" }
|
|
325
|
+
association :category, factory: [:category, :kids_menu]
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
trait :kids_mac_and_cheese do
|
|
329
|
+
name { "Kids Mac and Cheese" }
|
|
330
|
+
price { 649 }
|
|
331
|
+
sku { "REST-KID-002" }
|
|
332
|
+
association :category, factory: [:category, :kids_menu]
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
trait :mini_burger do
|
|
336
|
+
name { "Mini Burger" }
|
|
337
|
+
price { 699 }
|
|
338
|
+
sku { "REST-KID-003" }
|
|
339
|
+
association :category, factory: [:category, :kids_menu]
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
trait :grilled_cheese do
|
|
343
|
+
name { "Grilled Cheese" }
|
|
344
|
+
price { 599 }
|
|
345
|
+
sku { "REST-KID-004" }
|
|
346
|
+
association :category, factory: [:category, :kids_menu]
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
trait :kids_quesadilla do
|
|
350
|
+
name { "Kids Quesadilla" }
|
|
351
|
+
price { 649 }
|
|
352
|
+
sku { "REST-KID-005" }
|
|
353
|
+
association :category, factory: [:category, :kids_menu]
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# ── Specials ─────────────────────────────────────────────
|
|
357
|
+
|
|
358
|
+
trait :chefs_special do
|
|
359
|
+
name { "Chef's Special" }
|
|
360
|
+
price { 2499 }
|
|
361
|
+
sku { "REST-SPE-001" }
|
|
362
|
+
association :category, factory: [:category, :specials]
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
trait :soup_of_the_day do
|
|
366
|
+
name { "Soup of the Day" }
|
|
367
|
+
price { 599 }
|
|
368
|
+
sku { "REST-SPE-002" }
|
|
369
|
+
association :category, factory: [:category, :specials]
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# ═══════════════════════════════════════════════════════════
|
|
373
|
+
# CAFE & BAKERY (5 categories)
|
|
374
|
+
# ═══════════════════════════════════════════════════════════
|
|
375
|
+
|
|
376
|
+
trait :house_drip_coffee do
|
|
377
|
+
name { "House Drip Coffee" }
|
|
378
|
+
price { 299 }
|
|
379
|
+
sku { "CAFE-COF-001" }
|
|
380
|
+
association :category, factory: [:category, :coffee_espresso]
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
trait :espresso do
|
|
384
|
+
name { "Espresso" }
|
|
385
|
+
price { 350 }
|
|
386
|
+
sku { "CAFE-COF-002" }
|
|
387
|
+
association :category, factory: [:category, :coffee_espresso]
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
trait :cappuccino do
|
|
391
|
+
name { "Cappuccino" }
|
|
392
|
+
price { 499 }
|
|
393
|
+
sku { "CAFE-COF-003" }
|
|
394
|
+
association :category, factory: [:category, :coffee_espresso]
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
trait :latte do
|
|
398
|
+
name { "Latte" }
|
|
399
|
+
price { 549 }
|
|
400
|
+
sku { "CAFE-COF-004" }
|
|
401
|
+
association :category, factory: [:category, :coffee_espresso]
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
trait :cold_brew do
|
|
405
|
+
name { "Cold Brew" }
|
|
406
|
+
price { 499 }
|
|
407
|
+
sku { "CAFE-COF-005" }
|
|
408
|
+
association :category, factory: [:category, :coffee_espresso]
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
trait :croissant do
|
|
412
|
+
name { "Croissant" }
|
|
413
|
+
price { 399 }
|
|
414
|
+
sku { "CAFE-PAS-001" }
|
|
415
|
+
association :category, factory: [:category, :pastries]
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
trait :blueberry_muffin do
|
|
419
|
+
name { "Blueberry Muffin" }
|
|
420
|
+
price { 399 }
|
|
421
|
+
sku { "CAFE-PAS-002" }
|
|
422
|
+
association :category, factory: [:category, :pastries]
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
trait :cinnamon_roll do
|
|
426
|
+
name { "Cinnamon Roll" }
|
|
427
|
+
price { 449 }
|
|
428
|
+
sku { "CAFE-PAS-003" }
|
|
429
|
+
association :category, factory: [:category, :pastries]
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
trait :chocolate_chip_cookie do
|
|
433
|
+
name { "Chocolate Chip Cookie" }
|
|
434
|
+
price { 299 }
|
|
435
|
+
sku { "CAFE-PAS-004" }
|
|
436
|
+
association :category, factory: [:category, :pastries]
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
trait :almond_croissant do
|
|
440
|
+
name { "Almond Croissant" }
|
|
441
|
+
price { 449 }
|
|
442
|
+
sku { "CAFE-PAS-005" }
|
|
443
|
+
association :category, factory: [:category, :pastries]
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
trait :avocado_toast do
|
|
447
|
+
name { "Avocado Toast" }
|
|
448
|
+
price { 1099 }
|
|
449
|
+
sku { "CAFE-BRK-001" }
|
|
450
|
+
association :category, factory: [:category, :breakfast_items]
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
trait :breakfast_burrito do
|
|
454
|
+
name { "Breakfast Burrito" }
|
|
455
|
+
price { 999 }
|
|
456
|
+
sku { "CAFE-BRK-002" }
|
|
457
|
+
association :category, factory: [:category, :breakfast_items]
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
trait :acai_bowl do
|
|
461
|
+
name { "Acai Bowl" }
|
|
462
|
+
price { 1199 }
|
|
463
|
+
sku { "CAFE-BRK-003" }
|
|
464
|
+
association :category, factory: [:category, :breakfast_items]
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
trait :yogurt_parfait do
|
|
468
|
+
name { "Yogurt Parfait" }
|
|
469
|
+
price { 699 }
|
|
470
|
+
sku { "CAFE-BRK-004" }
|
|
471
|
+
association :category, factory: [:category, :breakfast_items]
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
trait :turkey_club do
|
|
475
|
+
name { "Turkey Club" }
|
|
476
|
+
price { 1199 }
|
|
477
|
+
sku { "CAFE-SAN-001" }
|
|
478
|
+
association :category, factory: [:category, :sandwiches_wraps]
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
trait :caprese_panini do
|
|
482
|
+
name { "Caprese Panini" }
|
|
483
|
+
price { 1099 }
|
|
484
|
+
sku { "CAFE-SAN-002" }
|
|
485
|
+
association :category, factory: [:category, :sandwiches_wraps]
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
trait :chicken_caesar_wrap do
|
|
489
|
+
name { "Chicken Caesar Wrap" }
|
|
490
|
+
price { 1099 }
|
|
491
|
+
sku { "CAFE-SAN-003" }
|
|
492
|
+
association :category, factory: [:category, :sandwiches_wraps]
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
trait :blt do
|
|
496
|
+
name { "BLT" }
|
|
497
|
+
price { 999 }
|
|
498
|
+
sku { "CAFE-SAN-004" }
|
|
499
|
+
association :category, factory: [:category, :sandwiches_wraps]
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
trait :berry_blast_smoothie do
|
|
503
|
+
name { "Berry Blast Smoothie" }
|
|
504
|
+
price { 699 }
|
|
505
|
+
sku { "CAFE-SMO-001" }
|
|
506
|
+
association :category, factory: [:category, :smoothies_juice]
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
trait :green_detox_juice do
|
|
510
|
+
name { "Green Detox Juice" }
|
|
511
|
+
price { 799 }
|
|
512
|
+
sku { "CAFE-SMO-002" }
|
|
513
|
+
association :category, factory: [:category, :smoothies_juice]
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
trait :mango_tango_smoothie do
|
|
517
|
+
name { "Mango Tango Smoothie" }
|
|
518
|
+
price { 699 }
|
|
519
|
+
sku { "CAFE-SMO-003" }
|
|
520
|
+
association :category, factory: [:category, :smoothies_juice]
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
trait :fresh_oj do
|
|
524
|
+
name { "Fresh Orange Juice" }
|
|
525
|
+
price { 499 }
|
|
526
|
+
sku { "CAFE-SMO-004" }
|
|
527
|
+
association :category, factory: [:category, :smoothies_juice]
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
# ═══════════════════════════════════════════════════════════
|
|
531
|
+
# BAR & NIGHTCLUB (5 categories)
|
|
532
|
+
# ═══════════════════════════════════════════════════════════
|
|
533
|
+
|
|
534
|
+
trait :bar_house_lager do
|
|
535
|
+
name { "House Lager" }
|
|
536
|
+
price { 599 }
|
|
537
|
+
sku { "BAR-DRF-001" }
|
|
538
|
+
association :category, factory: [:category, :draft_beer]
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
trait :bar_ipa do
|
|
542
|
+
name { "IPA" }
|
|
543
|
+
price { 699 }
|
|
544
|
+
sku { "BAR-DRF-002" }
|
|
545
|
+
association :category, factory: [:category, :draft_beer]
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
trait :bar_stout do
|
|
549
|
+
name { "Stout" }
|
|
550
|
+
price { 749 }
|
|
551
|
+
sku { "BAR-DRF-003" }
|
|
552
|
+
association :category, factory: [:category, :draft_beer]
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
trait :bar_wheat_beer do
|
|
556
|
+
name { "Wheat Beer" }
|
|
557
|
+
price { 649 }
|
|
558
|
+
sku { "BAR-DRF-004" }
|
|
559
|
+
association :category, factory: [:category, :draft_beer]
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
trait :bar_margarita do
|
|
563
|
+
name { "Margarita" }
|
|
564
|
+
price { 1199 }
|
|
565
|
+
sku { "BAR-COC-001" }
|
|
566
|
+
association :category, factory: [:category, :cocktails]
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
trait :bar_old_fashioned do
|
|
570
|
+
name { "Old Fashioned" }
|
|
571
|
+
price { 1399 }
|
|
572
|
+
sku { "BAR-COC-002" }
|
|
573
|
+
association :category, factory: [:category, :cocktails]
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
trait :bar_mojito do
|
|
577
|
+
name { "Mojito" }
|
|
578
|
+
price { 1199 }
|
|
579
|
+
sku { "BAR-COC-003" }
|
|
580
|
+
association :category, factory: [:category, :cocktails]
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
trait :bar_espresso_martini do
|
|
584
|
+
name { "Espresso Martini" }
|
|
585
|
+
price { 1499 }
|
|
586
|
+
sku { "BAR-COC-004" }
|
|
587
|
+
association :category, factory: [:category, :cocktails]
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
trait :whiskey_neat do
|
|
591
|
+
name { "Whiskey Neat" }
|
|
592
|
+
price { 1099 }
|
|
593
|
+
sku { "BAR-SPI-001" }
|
|
594
|
+
association :category, factory: [:category, :spirits]
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
trait :vodka_soda do
|
|
598
|
+
name { "Vodka Soda" }
|
|
599
|
+
price { 899 }
|
|
600
|
+
sku { "BAR-SPI-002" }
|
|
601
|
+
association :category, factory: [:category, :spirits]
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
trait :tequila_shot do
|
|
605
|
+
name { "Tequila Shot" }
|
|
606
|
+
price { 799 }
|
|
607
|
+
sku { "BAR-SPI-003" }
|
|
608
|
+
association :category, factory: [:category, :spirits]
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
trait :rum_and_coke do
|
|
612
|
+
name { "Rum and Coke" }
|
|
613
|
+
price { 899 }
|
|
614
|
+
sku { "BAR-SPI-004" }
|
|
615
|
+
association :category, factory: [:category, :spirits]
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
trait :bar_house_red do
|
|
619
|
+
name { "House Red" }
|
|
620
|
+
price { 899 }
|
|
621
|
+
sku { "BAR-WIN-001" }
|
|
622
|
+
association :category, factory: [:category, :wine_list]
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
trait :bar_house_white do
|
|
626
|
+
name { "House White" }
|
|
627
|
+
price { 899 }
|
|
628
|
+
sku { "BAR-WIN-002" }
|
|
629
|
+
association :category, factory: [:category, :wine_list]
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
trait :bar_prosecco do
|
|
633
|
+
name { "Prosecco" }
|
|
634
|
+
price { 999 }
|
|
635
|
+
sku { "BAR-WIN-003" }
|
|
636
|
+
association :category, factory: [:category, :wine_list]
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
trait :bar_rose do
|
|
640
|
+
name { "Rose" }
|
|
641
|
+
price { 999 }
|
|
642
|
+
sku { "BAR-WIN-004" }
|
|
643
|
+
association :category, factory: [:category, :wine_list]
|
|
644
|
+
end
|
|
645
|
+
|
|
646
|
+
trait :bar_loaded_fries do
|
|
647
|
+
name { "Loaded Fries" }
|
|
648
|
+
price { 899 }
|
|
649
|
+
sku { "BAR-SNK-001" }
|
|
650
|
+
association :category, factory: [:category, :bar_snacks]
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
trait :bar_sliders do
|
|
654
|
+
name { "Sliders" }
|
|
655
|
+
price { 1199 }
|
|
656
|
+
sku { "BAR-SNK-002" }
|
|
657
|
+
association :category, factory: [:category, :bar_snacks]
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
trait :bar_wings do
|
|
661
|
+
name { "Wings" }
|
|
662
|
+
price { 1099 }
|
|
663
|
+
sku { "BAR-SNK-003" }
|
|
664
|
+
association :category, factory: [:category, :bar_snacks]
|
|
665
|
+
end
|
|
666
|
+
|
|
667
|
+
trait :bar_pretzel_bites do
|
|
668
|
+
name { "Pretzel Bites" }
|
|
669
|
+
price { 799 }
|
|
670
|
+
sku { "BAR-SNK-004" }
|
|
671
|
+
association :category, factory: [:category, :bar_snacks]
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
# ═══════════════════════════════════════════════════════════
|
|
675
|
+
# PIZZERIA (5 categories)
|
|
676
|
+
# ═══════════════════════════════════════════════════════════
|
|
677
|
+
|
|
678
|
+
trait :margherita do
|
|
679
|
+
name { "Margherita" }
|
|
680
|
+
price { 1499 }
|
|
681
|
+
sku { "PIZ-PIZ-001" }
|
|
682
|
+
association :category, factory: [:category, :pizzas]
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
trait :pepperoni do
|
|
686
|
+
name { "Pepperoni" }
|
|
687
|
+
price { 1599 }
|
|
688
|
+
sku { "PIZ-PIZ-002" }
|
|
689
|
+
association :category, factory: [:category, :pizzas]
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
trait :supreme do
|
|
693
|
+
name { "Supreme" }
|
|
694
|
+
price { 1899 }
|
|
695
|
+
sku { "PIZ-PIZ-003" }
|
|
696
|
+
association :category, factory: [:category, :pizzas]
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
trait :hawaiian do
|
|
700
|
+
name { "Hawaiian" }
|
|
701
|
+
price { 1599 }
|
|
702
|
+
sku { "PIZ-PIZ-004" }
|
|
703
|
+
association :category, factory: [:category, :pizzas]
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
trait :bbq_chicken_pizza do
|
|
707
|
+
name { "BBQ Chicken Pizza" }
|
|
708
|
+
price { 1799 }
|
|
709
|
+
sku { "PIZ-PIZ-005" }
|
|
710
|
+
association :category, factory: [:category, :pizzas]
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
trait :meat_lovers do
|
|
714
|
+
name { "Meat Lovers" }
|
|
715
|
+
price { 1899 }
|
|
716
|
+
sku { "PIZ-PIZ-006" }
|
|
717
|
+
association :category, factory: [:category, :pizzas]
|
|
718
|
+
end
|
|
719
|
+
|
|
720
|
+
trait :classic_calzone do
|
|
721
|
+
name { "Classic Calzone" }
|
|
722
|
+
price { 1299 }
|
|
723
|
+
sku { "PIZ-CAL-001" }
|
|
724
|
+
association :category, factory: [:category, :calzones]
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
trait :meat_calzone do
|
|
728
|
+
name { "Meat Calzone" }
|
|
729
|
+
price { 1499 }
|
|
730
|
+
sku { "PIZ-CAL-002" }
|
|
731
|
+
association :category, factory: [:category, :calzones]
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
trait :stromboli do
|
|
735
|
+
name { "Stromboli" }
|
|
736
|
+
price { 1399 }
|
|
737
|
+
sku { "PIZ-CAL-003" }
|
|
738
|
+
association :category, factory: [:category, :calzones]
|
|
739
|
+
end
|
|
740
|
+
|
|
741
|
+
trait :spinach_calzone do
|
|
742
|
+
name { "Spinach Calzone" }
|
|
743
|
+
price { 1299 }
|
|
744
|
+
sku { "PIZ-CAL-004" }
|
|
745
|
+
association :category, factory: [:category, :calzones]
|
|
746
|
+
end
|
|
747
|
+
|
|
748
|
+
trait :pizza_garlic_bread do
|
|
749
|
+
name { "Garlic Bread" }
|
|
750
|
+
price { 499 }
|
|
751
|
+
sku { "PIZ-SID-001" }
|
|
752
|
+
association :category, factory: [:category, :pizza_sides]
|
|
753
|
+
end
|
|
754
|
+
|
|
755
|
+
trait :pizza_garden_salad do
|
|
756
|
+
name { "Garden Salad" }
|
|
757
|
+
price { 699 }
|
|
758
|
+
sku { "PIZ-SID-002" }
|
|
759
|
+
association :category, factory: [:category, :pizza_sides]
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
trait :pizza_caesar_salad do
|
|
763
|
+
name { "Caesar Salad" }
|
|
764
|
+
price { 799 }
|
|
765
|
+
sku { "PIZ-SID-003" }
|
|
766
|
+
association :category, factory: [:category, :pizza_sides]
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
trait :garlic_knots do
|
|
770
|
+
name { "Garlic Knots" }
|
|
771
|
+
price { 499 }
|
|
772
|
+
sku { "PIZ-SID-004" }
|
|
773
|
+
association :category, factory: [:category, :pizza_sides]
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
trait :pizza_fountain_drink do
|
|
777
|
+
name { "Fountain Drink" }
|
|
778
|
+
price { 299 }
|
|
779
|
+
sku { "PIZ-DRK-001" }
|
|
780
|
+
association :category, factory: [:category, :pizza_drinks]
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
trait :pizza_iced_tea do
|
|
784
|
+
name { "Iced Tea" }
|
|
785
|
+
price { 299 }
|
|
786
|
+
sku { "PIZ-DRK-002" }
|
|
787
|
+
association :category, factory: [:category, :pizza_drinks]
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
trait :pizza_lemonade do
|
|
791
|
+
name { "Lemonade" }
|
|
792
|
+
price { 349 }
|
|
793
|
+
sku { "PIZ-DRK-003" }
|
|
794
|
+
association :category, factory: [:category, :pizza_drinks]
|
|
795
|
+
end
|
|
796
|
+
|
|
797
|
+
trait :cannoli do
|
|
798
|
+
name { "Cannoli" }
|
|
799
|
+
price { 599 }
|
|
800
|
+
sku { "PIZ-DES-001" }
|
|
801
|
+
association :category, factory: [:category, :pizza_desserts]
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
trait :pizza_brownie do
|
|
805
|
+
name { "Chocolate Brownie" }
|
|
806
|
+
price { 499 }
|
|
807
|
+
sku { "PIZ-DES-002" }
|
|
808
|
+
association :category, factory: [:category, :pizza_desserts]
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
trait :pizza_cheesecake do
|
|
812
|
+
name { "Cheesecake" }
|
|
813
|
+
price { 699 }
|
|
814
|
+
sku { "PIZ-DES-003" }
|
|
815
|
+
association :category, factory: [:category, :pizza_desserts]
|
|
816
|
+
end
|
|
817
|
+
|
|
818
|
+
# ═══════════════════════════════════════════════════════════
|
|
819
|
+
# FINE DINING (5 categories)
|
|
820
|
+
# ═══════════════════════════════════════════════════════════
|
|
821
|
+
|
|
822
|
+
trait :seared_foie_gras do
|
|
823
|
+
name { "Seared Foie Gras" }
|
|
824
|
+
price { 3200 }
|
|
825
|
+
sku { "FIN-FST-001" }
|
|
826
|
+
association :category, factory: [:category, :first_course]
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
trait :lobster_bisque do
|
|
830
|
+
name { "Lobster Bisque" }
|
|
831
|
+
price { 1800 }
|
|
832
|
+
sku { "FIN-FST-002" }
|
|
833
|
+
association :category, factory: [:category, :first_course]
|
|
834
|
+
end
|
|
835
|
+
|
|
836
|
+
trait :tuna_tartare do
|
|
837
|
+
name { "Tuna Tartare" }
|
|
838
|
+
price { 2400 }
|
|
839
|
+
sku { "FIN-FST-003" }
|
|
840
|
+
association :category, factory: [:category, :first_course]
|
|
841
|
+
end
|
|
842
|
+
|
|
843
|
+
trait :burrata_salad do
|
|
844
|
+
name { "Burrata Salad" }
|
|
845
|
+
price { 1900 }
|
|
846
|
+
sku { "FIN-FST-004" }
|
|
847
|
+
association :category, factory: [:category, :first_course]
|
|
848
|
+
end
|
|
849
|
+
|
|
850
|
+
trait :oysters_half_dozen do
|
|
851
|
+
name { "Oysters Half Dozen" }
|
|
852
|
+
price { 2800 }
|
|
853
|
+
sku { "FIN-FST-005" }
|
|
854
|
+
association :category, factory: [:category, :first_course]
|
|
855
|
+
end
|
|
856
|
+
|
|
857
|
+
trait :wagyu_ribeye do
|
|
858
|
+
name { "Wagyu Ribeye" }
|
|
859
|
+
price { 8500 }
|
|
860
|
+
sku { "FIN-MAN-001" }
|
|
861
|
+
association :category, factory: [:category, :main_course]
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
trait :chilean_sea_bass do
|
|
865
|
+
name { "Chilean Sea Bass" }
|
|
866
|
+
price { 4200 }
|
|
867
|
+
sku { "FIN-MAN-002" }
|
|
868
|
+
association :category, factory: [:category, :main_course]
|
|
869
|
+
end
|
|
870
|
+
|
|
871
|
+
trait :rack_of_lamb do
|
|
872
|
+
name { "Rack of Lamb" }
|
|
873
|
+
price { 5200 }
|
|
874
|
+
sku { "FIN-MAN-003" }
|
|
875
|
+
association :category, factory: [:category, :main_course]
|
|
876
|
+
end
|
|
877
|
+
|
|
878
|
+
trait :duck_breast do
|
|
879
|
+
name { "Duck Breast" }
|
|
880
|
+
price { 3800 }
|
|
881
|
+
sku { "FIN-MAN-004" }
|
|
882
|
+
association :category, factory: [:category, :main_course]
|
|
883
|
+
end
|
|
884
|
+
|
|
885
|
+
trait :truffle_risotto do
|
|
886
|
+
name { "Truffle Risotto" }
|
|
887
|
+
price { 3200 }
|
|
888
|
+
sku { "FIN-MAN-005" }
|
|
889
|
+
association :category, factory: [:category, :main_course]
|
|
890
|
+
end
|
|
891
|
+
|
|
892
|
+
trait :fine_creme_brulee do
|
|
893
|
+
name { "Creme Brulee" }
|
|
894
|
+
price { 1600 }
|
|
895
|
+
sku { "FIN-DES-001" }
|
|
896
|
+
association :category, factory: [:category, :fine_desserts]
|
|
897
|
+
end
|
|
898
|
+
|
|
899
|
+
trait :chocolate_souffle do
|
|
900
|
+
name { "Chocolate Souffle" }
|
|
901
|
+
price { 1800 }
|
|
902
|
+
sku { "FIN-DES-002" }
|
|
903
|
+
association :category, factory: [:category, :fine_desserts]
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
trait :tasting_plate do
|
|
907
|
+
name { "Dessert Tasting Plate" }
|
|
908
|
+
price { 2200 }
|
|
909
|
+
sku { "FIN-DES-003" }
|
|
910
|
+
association :category, factory: [:category, :fine_desserts]
|
|
911
|
+
end
|
|
912
|
+
|
|
913
|
+
trait :cheese_board do
|
|
914
|
+
name { "Artisan Cheese Board" }
|
|
915
|
+
price { 2600 }
|
|
916
|
+
sku { "FIN-DES-004" }
|
|
917
|
+
association :category, factory: [:category, :fine_desserts]
|
|
918
|
+
end
|
|
919
|
+
|
|
920
|
+
trait :fine_tiramisu do
|
|
921
|
+
name { "Tiramisu" }
|
|
922
|
+
price { 1500 }
|
|
923
|
+
sku { "FIN-DES-005" }
|
|
924
|
+
association :category, factory: [:category, :fine_desserts]
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
trait :fine_champagne do
|
|
928
|
+
name { "Champagne" }
|
|
929
|
+
price { 2200 }
|
|
930
|
+
sku { "FIN-WIN-001" }
|
|
931
|
+
association :category, factory: [:category, :fine_wines]
|
|
932
|
+
end
|
|
933
|
+
|
|
934
|
+
trait :fine_cabernet do
|
|
935
|
+
name { "Cabernet Sauvignon" }
|
|
936
|
+
price { 1800 }
|
|
937
|
+
sku { "FIN-WIN-002" }
|
|
938
|
+
association :category, factory: [:category, :fine_wines]
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
trait :fine_pinot_noir do
|
|
942
|
+
name { "Pinot Noir" }
|
|
943
|
+
price { 1600 }
|
|
944
|
+
sku { "FIN-WIN-003" }
|
|
945
|
+
association :category, factory: [:category, :fine_wines]
|
|
946
|
+
end
|
|
947
|
+
|
|
948
|
+
trait :fine_chardonnay do
|
|
949
|
+
name { "Chardonnay" }
|
|
950
|
+
price { 1500 }
|
|
951
|
+
sku { "FIN-WIN-004" }
|
|
952
|
+
association :category, factory: [:category, :fine_wines]
|
|
953
|
+
end
|
|
954
|
+
|
|
955
|
+
trait :fine_negroni do
|
|
956
|
+
name { "Negroni" }
|
|
957
|
+
price { 1800 }
|
|
958
|
+
sku { "FIN-COC-001" }
|
|
959
|
+
association :category, factory: [:category, :fine_cocktails]
|
|
960
|
+
end
|
|
961
|
+
|
|
962
|
+
trait :fine_manhattan do
|
|
963
|
+
name { "Manhattan" }
|
|
964
|
+
price { 1900 }
|
|
965
|
+
sku { "FIN-COC-002" }
|
|
966
|
+
association :category, factory: [:category, :fine_cocktails]
|
|
967
|
+
end
|
|
968
|
+
|
|
969
|
+
trait :fine_french_75 do
|
|
970
|
+
name { "French 75" }
|
|
971
|
+
price { 1700 }
|
|
972
|
+
sku { "FIN-COC-003" }
|
|
973
|
+
association :category, factory: [:category, :fine_cocktails]
|
|
974
|
+
end
|
|
975
|
+
end
|
|
976
|
+
end
|