kittyverse 0.3.0 → 0.4.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 +4 -4
- data/Manifest.txt +5 -3
- data/README.md +69 -10
- data/lib/kittyverse.rb +9 -268
- data/lib/kittyverse/cattributes.rb +29 -22
- data/lib/kittyverse/config/fancies.rb +550 -0
- data/lib/kittyverse/{purrstige.rb → config/purrstiges.rb} +1 -1
- data/lib/kittyverse/config/traits.rb +377 -0
- data/lib/kittyverse/{traits_timeline.rb → config/traits_timeline.rb} +0 -0
- data/lib/kittyverse/fancies.rb +158 -550
- data/lib/kittyverse/links.rb +6 -9
- data/lib/kittyverse/traits.rb +262 -374
- data/lib/kittyverse/version.rb +1 -1
- data/test/test_cattributes.rb +22 -34
- data/test/test_fancies.rb +52 -0
- data/test/test_traits.rb +66 -169
- metadata +7 -5
- data/lib/kittyverse/catalog.rb +0 -27
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
|
7
7
|
## note: totesbasic has three traits / genes
|
8
|
-
TOTESBASIC = ['
|
8
|
+
TOTESBASIC = ['Totesbasic 1', 'Totesbasic 2', 'Totesbasic 3'] ## was: ['PA14', 'PA15', 'PA23']
|
9
9
|
ANY_TOTESBASIC = ALL_TOTESBASIC = TOTESBASIC
|
10
10
|
|
11
11
|
|
@@ -0,0 +1,377 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# trais / kaittributes
|
5
|
+
# see https://cryptokittydex.com/kaittributes
|
6
|
+
# https://docs.google.com/spreadsheets/d/1ShiBKSglFAB2vJe4Uow3iF09FBVq6ZAaOzTCIECf4iA
|
7
|
+
# http://www.rolldice.club/cryptokitties/wkt_tree.php
|
8
|
+
# https://www.cryptokitties.co/cattributes (official cattributes list)
|
9
|
+
#
|
10
|
+
#
|
11
|
+
# for latest updates on new cattributes see:
|
12
|
+
# https://updates.cryptokitties.co (official latest updates/timeline)
|
13
|
+
|
14
|
+
## ordered by gene position (0,1,3.4,5,... etc.)
|
15
|
+
## 12 traits (4 genes each)
|
16
|
+
TRAITS =
|
17
|
+
{
|
18
|
+
body: {
|
19
|
+
genes: '0-3',
|
20
|
+
name: 'Fur', code: 'FU',
|
21
|
+
kai: {
|
22
|
+
'1' => 'Savannah',
|
23
|
+
'2' => 'Selkirk',
|
24
|
+
'3' => 'Chantilly',
|
25
|
+
'4' => 'Birman',
|
26
|
+
'5' => 'Koladiviya',
|
27
|
+
'6' => 'Bobtail',
|
28
|
+
'7' => 'Manul',
|
29
|
+
'8' => 'Pixiebob',
|
30
|
+
'9' => 'Siberian',
|
31
|
+
'a' => 'Cymric',
|
32
|
+
'b' => 'Chartreux',
|
33
|
+
'c' => 'Himalayan',
|
34
|
+
'd' => 'Munchkin',
|
35
|
+
'e' => 'Sphynx',
|
36
|
+
'f' => 'Ragamuffin',
|
37
|
+
'g' => 'Ragdoll',
|
38
|
+
'h' => 'Norwegianforest',
|
39
|
+
'i' => 'Mekong',
|
40
|
+
'j' => 'Highlander',
|
41
|
+
'k' => 'Balinese',
|
42
|
+
'm' => 'Lynx',
|
43
|
+
'n' => 'Mainecoon',
|
44
|
+
'o' => 'Laperm',
|
45
|
+
'p' => 'Persian',
|
46
|
+
'q' => 'Fox',
|
47
|
+
'r' => 'Kurilian',
|
48
|
+
's' => 'Toyger',
|
49
|
+
't' => 'Manx',
|
50
|
+
'u' => 'Lykoi',
|
51
|
+
'v' => 'Burmilla',
|
52
|
+
'w' => 'Liger',
|
53
|
+
'x' => ''
|
54
|
+
}
|
55
|
+
},
|
56
|
+
pattern: {
|
57
|
+
genes: '4-7',
|
58
|
+
name: 'Pattern', code: 'PA',
|
59
|
+
kai: {
|
60
|
+
'1' => 'Vigilante',
|
61
|
+
'2' => 'Tiger',
|
62
|
+
'3' => 'Rascal',
|
63
|
+
'4' => 'Ganado',
|
64
|
+
'5' => 'Leopard',
|
65
|
+
'6' => 'Camo',
|
66
|
+
'7' => 'Rorschach',
|
67
|
+
'8' => 'Spangled',
|
68
|
+
'9' => 'Calicool',
|
69
|
+
'a' => 'Luckystripe',
|
70
|
+
'b' => 'Amur',
|
71
|
+
'c' => 'Jaguar',
|
72
|
+
'd' => 'Spock',
|
73
|
+
'e' => 'Mittens',
|
74
|
+
'f' => 'Totesbasic 1', ## use totesbasic_f or totesbasic (14) - why? why not?
|
75
|
+
'g' => 'Totesbasic 2', ## use totesbasic_g or totesbasic (15)
|
76
|
+
'h' => 'Splat',
|
77
|
+
'i' => 'Thunderstruck',
|
78
|
+
'j' => 'Dippedcone',
|
79
|
+
'k' => 'Highsociety',
|
80
|
+
'm' => 'Tigerpunk',
|
81
|
+
'n' => 'Henna',
|
82
|
+
'o' => 'Arcreactor',
|
83
|
+
'p' => 'Totesbasic 3', ## use totesbasic_p or totesbasic (23) - why? why not?
|
84
|
+
'q' => 'Scorpius',
|
85
|
+
'r' => 'Razzledazzle',
|
86
|
+
's' => 'Hotrod',
|
87
|
+
't' => 'Allyouneed',
|
88
|
+
'u' => 'Avatar',
|
89
|
+
'v' => 'Gyre',
|
90
|
+
'w' => 'Moonrise',
|
91
|
+
'x' => ''
|
92
|
+
}
|
93
|
+
},
|
94
|
+
coloreyes: {
|
95
|
+
genes: '8-11',
|
96
|
+
name: 'Eye Color', code: 'EC',
|
97
|
+
kai: {
|
98
|
+
'1' => 'Hundergrey',
|
99
|
+
'2' => 'Gold',
|
100
|
+
'3' => 'Topaz',
|
101
|
+
'4' => 'Mintgreen',
|
102
|
+
'5' => 'Isotope',
|
103
|
+
'6' => 'Sizzurp',
|
104
|
+
'7' => 'Chestnut',
|
105
|
+
'8' => 'Strawberry',
|
106
|
+
'9' => 'Sapphire',
|
107
|
+
'a' => 'Forgetmenot',
|
108
|
+
'b' => 'Dahlia',
|
109
|
+
'c' => 'Coralsunrise',
|
110
|
+
'd' => 'Olive',
|
111
|
+
'e' => 'Doridnudibranch',
|
112
|
+
'f' => 'Parakeet',
|
113
|
+
'g' => 'Cyan',
|
114
|
+
'h' => 'Pumpkin',
|
115
|
+
'i' => 'Limegreen',
|
116
|
+
'j' => 'Bridesmaid',
|
117
|
+
'k' => 'Bubblegum',
|
118
|
+
'm' => 'Twilightsparkle',
|
119
|
+
'n' => 'Palejade',
|
120
|
+
'o' => 'Pinefresh',
|
121
|
+
'p' => 'Eclipse',
|
122
|
+
'q' => 'Babypuke',
|
123
|
+
'r' => 'Downbythebay',
|
124
|
+
's' => 'Autumnmoon',
|
125
|
+
't' => 'Oasis',
|
126
|
+
'u' => 'Gemini',
|
127
|
+
'v' => 'Dioscuri',
|
128
|
+
'w' => 'Kaleidoscope',
|
129
|
+
'x' => ''
|
130
|
+
}
|
131
|
+
},
|
132
|
+
eyes: {
|
133
|
+
genes: '12-15',
|
134
|
+
name: 'Eye Shape', code: 'ES', ## eye type
|
135
|
+
kai: {
|
136
|
+
'1' => 'Swarley',
|
137
|
+
'2' => 'Wonky',
|
138
|
+
'3' => 'Serpent',
|
139
|
+
'4' => 'Googly',
|
140
|
+
'5' => 'Otaku',
|
141
|
+
'6' => 'Simple',
|
142
|
+
'7' => 'Crazy',
|
143
|
+
'8' => 'Thicccbrowz',
|
144
|
+
'9' => 'Caffeine',
|
145
|
+
'a' => 'Wowza',
|
146
|
+
'b' => 'Baddate',
|
147
|
+
'c' => 'Asif',
|
148
|
+
'd' => 'Chronic',
|
149
|
+
'e' => 'Slyboots',
|
150
|
+
'f' => 'Wiley',
|
151
|
+
'g' => 'Stunned',
|
152
|
+
'h' => 'Chameleon',
|
153
|
+
'i' => 'Alien',
|
154
|
+
'j' => 'Fabulous',
|
155
|
+
'k' => 'Raisedbrow',
|
156
|
+
'm' => 'Tendertears',
|
157
|
+
'n' => 'Hacker',
|
158
|
+
'o' => 'Sass',
|
159
|
+
'p' => 'Sweetmeloncakes',
|
160
|
+
'q' => 'Oceanid',
|
161
|
+
'r' => 'Wingtips',
|
162
|
+
's' => 'Firedup',
|
163
|
+
't' => 'Buzzed',
|
164
|
+
'u' => 'Bornwithit',
|
165
|
+
'v' => 'Candyshoppe',
|
166
|
+
'w' => 'Drama',
|
167
|
+
'x' => ''
|
168
|
+
}
|
169
|
+
},
|
170
|
+
colorprimary: {
|
171
|
+
genes: '16-19',
|
172
|
+
name: 'Base Color', code: 'BC', ## color1 / colorprimary / body color
|
173
|
+
kai: {
|
174
|
+
'1' => 'Shadowgrey',
|
175
|
+
'2' => 'Salmon',
|
176
|
+
'3' => 'Meowgarine',
|
177
|
+
'4' => 'Orangesoda',
|
178
|
+
'5' => 'Cottoncandy',
|
179
|
+
'6' => 'Mauveover',
|
180
|
+
'7' => 'Aquamarine',
|
181
|
+
'8' => 'Nachocheez',
|
182
|
+
'9' => 'Harbourfog',
|
183
|
+
'a' => 'Cinderella',
|
184
|
+
'b' => 'Greymatter',
|
185
|
+
'c' => 'Tundra',
|
186
|
+
'd' => 'Brownies',
|
187
|
+
'e' => 'Dragonfruit',
|
188
|
+
'f' => 'Hintomint',
|
189
|
+
'g' => 'Bananacream',
|
190
|
+
'h' => 'Cloudwhite',
|
191
|
+
'i' => 'Cornflower',
|
192
|
+
'j' => 'Oldlace',
|
193
|
+
'k' => 'Koala',
|
194
|
+
'm' => 'Lavender',
|
195
|
+
'n' => 'Glacier',
|
196
|
+
'o' => 'Redvelvet',
|
197
|
+
'p' => 'Verdigris',
|
198
|
+
'q' => 'Icicle',
|
199
|
+
'r' => 'Onyx',
|
200
|
+
's' => 'Hyacinth',
|
201
|
+
't' => 'Martian',
|
202
|
+
'u' => 'Hotcocoa',
|
203
|
+
'v' => 'Shamrock',
|
204
|
+
'w' => 'Firstblush',
|
205
|
+
'x' => ''
|
206
|
+
}
|
207
|
+
},
|
208
|
+
colorsecondary: {
|
209
|
+
genes: '20-23',
|
210
|
+
name: 'Highlight Color', code: 'HC', ## color2 / colorsecondary / sec color / pattern color
|
211
|
+
kai: {
|
212
|
+
'1' => 'Cyborg',
|
213
|
+
'2' => 'Springcrocus',
|
214
|
+
'3' => 'Egyptiankohl',
|
215
|
+
'4' => 'Poisonberry',
|
216
|
+
'5' => 'Lilac',
|
217
|
+
'6' => 'Apricot',
|
218
|
+
'7' => 'Royalpurple',
|
219
|
+
'8' => 'Padparadscha',
|
220
|
+
'9' => 'Swampgreen',
|
221
|
+
'a' => 'Violet',
|
222
|
+
'b' => 'Scarlet',
|
223
|
+
'c' => 'Barkbrown',
|
224
|
+
'd' => 'Coffee',
|
225
|
+
'e' => 'Lemonade',
|
226
|
+
'f' => 'Chocolate',
|
227
|
+
'g' => 'Butterscotch',
|
228
|
+
'h' => 'Ooze',
|
229
|
+
'i' => 'Safetyvest',
|
230
|
+
'j' => 'Turtleback',
|
231
|
+
'k' => 'Rosequartz',
|
232
|
+
'm' => 'Wolfgrey',
|
233
|
+
'n' => 'Cerulian',
|
234
|
+
'o' => 'Skyblue',
|
235
|
+
'p' => 'Garnet',
|
236
|
+
'q' => 'Peppermint',
|
237
|
+
'r' => 'Universe',
|
238
|
+
's' => 'Royalblue',
|
239
|
+
't' => 'Mertail',
|
240
|
+
'u' => 'Inflatablepool',
|
241
|
+
'v' => 'Pearl',
|
242
|
+
'w' => 'Prairierose',
|
243
|
+
'x' => ''
|
244
|
+
}
|
245
|
+
},
|
246
|
+
colortertiary: {
|
247
|
+
genes: '24-27',
|
248
|
+
name: 'Accent Color', code: 'AC', ## color3 / colortertiary
|
249
|
+
kai: {
|
250
|
+
'1' => 'Belleblue',
|
251
|
+
'2' => 'Sandalwood',
|
252
|
+
'3' => 'Peach',
|
253
|
+
'4' => 'Icy',
|
254
|
+
'5' => 'Granitegrey',
|
255
|
+
'6' => 'Cashewmilk',
|
256
|
+
'7' => 'Kittencream',
|
257
|
+
'8' => 'Emeraldgreen',
|
258
|
+
'9' => 'Kalahari',
|
259
|
+
'a' => 'Shale',
|
260
|
+
'b' => 'Purplehaze',
|
261
|
+
'c' => 'Hanauma',
|
262
|
+
'd' => 'Azaleablush',
|
263
|
+
'e' => 'Missmuffett',
|
264
|
+
'f' => 'Morningglory',
|
265
|
+
'g' => 'Frosting',
|
266
|
+
'h' => 'Daffodil',
|
267
|
+
'i' => 'Flamingo',
|
268
|
+
'j' => 'Buttercup',
|
269
|
+
'k' => 'Bloodred',
|
270
|
+
'm' => 'Atlantis',
|
271
|
+
'n' => 'Summerbonnet',
|
272
|
+
'o' => 'Periwinkle',
|
273
|
+
'p' => 'Patrickstarfish',
|
274
|
+
'q' => 'Seafoam',
|
275
|
+
'r' => 'Cobalt',
|
276
|
+
's' => 'Mallowflower',
|
277
|
+
't' => 'Mintmacaron',
|
278
|
+
'u' => 'Sully',
|
279
|
+
'v' => 'Fallspice',
|
280
|
+
'w' => 'Dreamboat',
|
281
|
+
'x' => ''
|
282
|
+
}
|
283
|
+
},
|
284
|
+
wild: {
|
285
|
+
genes: '28-31',
|
286
|
+
name: 'Wild Element', code: 'WE',
|
287
|
+
kai: {
|
288
|
+
'h' => 'Littlefoot',
|
289
|
+
'i' => 'Elk',
|
290
|
+
'j' => 'Ducky',
|
291
|
+
'k' => 'Trioculus',
|
292
|
+
'm' => 'Daemonwings',
|
293
|
+
'n' => 'Featherbrain',
|
294
|
+
'o' => 'Flapflap',
|
295
|
+
'p' => 'Daemonhorns',
|
296
|
+
'q' => 'Dragontail',
|
297
|
+
'r' => 'Aflutter',
|
298
|
+
's' => 'Foghornpawhorn',
|
299
|
+
't' => 'Unicorn',
|
300
|
+
'u' => 'Dragonwings',
|
301
|
+
'v' => 'Alicorn',
|
302
|
+
'w' => 'Wyrm',
|
303
|
+
'x' => ''
|
304
|
+
}
|
305
|
+
},
|
306
|
+
mouth: {
|
307
|
+
genes: '32-35',
|
308
|
+
name: 'Mouth', code: 'MO',
|
309
|
+
kai: {
|
310
|
+
'1' => 'Whixtensions',
|
311
|
+
'2' => 'Wasntme',
|
312
|
+
'3' => 'Wuvme',
|
313
|
+
'4' => 'Gerbil',
|
314
|
+
'5' => 'Confuzzled',
|
315
|
+
'6' => 'Impish',
|
316
|
+
'7' => 'Belch',
|
317
|
+
'8' => 'Rollercoaster',
|
318
|
+
'9' => 'Beard',
|
319
|
+
'a' => 'Pouty',
|
320
|
+
'b' => 'Saycheese',
|
321
|
+
'c' => 'Grim',
|
322
|
+
'd' => 'Fangtastic',
|
323
|
+
'e' => 'Moue',
|
324
|
+
'f' => 'Happygokitty',
|
325
|
+
'g' => 'Soserious',
|
326
|
+
'h' => 'Cheeky',
|
327
|
+
'i' => 'Starstruck',
|
328
|
+
'j' => 'Samwise',
|
329
|
+
'k' => 'Ruhroh',
|
330
|
+
'm' => 'Dali',
|
331
|
+
'n' => 'Grimace',
|
332
|
+
'o' => 'Majestic',
|
333
|
+
'p' => 'Tongue',
|
334
|
+
'q' => 'Yokel',
|
335
|
+
'r' => 'Topoftheworld',
|
336
|
+
's' => 'Neckbeard',
|
337
|
+
't' => 'Satiated',
|
338
|
+
'u' => 'Walrus',
|
339
|
+
'v' => 'Struck',
|
340
|
+
'w' => 'Delite',
|
341
|
+
'x' => ''
|
342
|
+
}
|
343
|
+
},
|
344
|
+
environment: {
|
345
|
+
genes: '36-39',
|
346
|
+
name: 'Environment', code: 'EN',
|
347
|
+
kai: {
|
348
|
+
'h' => 'Salty',
|
349
|
+
'i' => 'Dune',
|
350
|
+
'j' => 'Juju',
|
351
|
+
'k' => 'Tinybox',
|
352
|
+
'm' => 'Myparade',
|
353
|
+
'n' => 'Finalfrontier',
|
354
|
+
'o' => 'Metime',
|
355
|
+
'p' => 'Drift',
|
356
|
+
'q' => 'Secretgarden',
|
357
|
+
'r' => 'Frozen',
|
358
|
+
's' => 'Roadtogold',
|
359
|
+
't' => 'Jacked',
|
360
|
+
'u' => 'Floorislava',
|
361
|
+
'v' => 'Prism',
|
362
|
+
'w' => 'Junglebook',
|
363
|
+
'x' => ''
|
364
|
+
}
|
365
|
+
},
|
366
|
+
secret: {
|
367
|
+
genes: '40-43',
|
368
|
+
name: 'Secret Y Gene', code: 'SE', ## todo: change to Y Gene or Y (see https://guide.cryptokitties.co/guide/cat-features/genes)
|
369
|
+
kai: { }
|
370
|
+
},
|
371
|
+
prestige: {
|
372
|
+
genes: '44-47',
|
373
|
+
name: 'Purrstige', code: 'PU',
|
374
|
+
kai: { }
|
375
|
+
## prune, furball, duckduckcat, or thatsawrap - more like fancies (not really traits)
|
376
|
+
}
|
377
|
+
}
|
File without changes
|
data/lib/kittyverse/fancies.rb
CHANGED
@@ -1,550 +1,158 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
#
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
##
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
##
|
22
|
-
##
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
##
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
tallythepurrocious: { name: 'Tally The Purrocious',
|
161
|
-
recipe: {
|
162
|
-
time: { start: '2019-01-10', end: '2019-01-21' }, count: 3992,
|
163
|
-
traits: ['selkirk', 'koala', 'arcreactor', 'sully'] },
|
164
|
-
desc: 'Gods Unchained Promotion - Mystical Cat Talisman'
|
165
|
-
},
|
166
|
-
## date: '2019-01-10 ??? -- use for date "announced" or something - why? why not?
|
167
|
-
aeoncat: { name: 'Aeoncat',
|
168
|
-
specialedition: {
|
169
|
-
time: { start: '2019-01-17', end: '2019-01-28' },
|
170
|
-
limit: 380 }, ## Don't sleep - there's only 380 up for grabs!
|
171
|
-
desc: 'Goddess Aeona - Goddess of Nature - Gods Unchained Promotion'
|
172
|
-
},
|
173
|
-
hypurrion: { name: 'Hypurrion', date: '2019-01-10',
|
174
|
-
exclusive: {
|
175
|
-
limit: 1, ids: [269]},
|
176
|
-
desc: 'Hyperion - Mythic Titan of Light - Gods Unchained Promotion'
|
177
|
-
},
|
178
|
-
|
179
|
-
## 2018
|
180
|
-
## December
|
181
|
-
catzy: { name: 'Catzy', date: '2018-12-31',
|
182
|
-
specialedition: {
|
183
|
-
limit: 10, ids: (1137653..1137662).to_a },
|
184
|
-
desc: 'Changpeng "CZ" Zhao - CEO of Binance - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
|
185
|
-
},
|
186
|
-
purremyallaire: { name: 'Purremy Allaire', date: '2018-12-31',
|
187
|
-
specialedition: {
|
188
|
-
limit: 10, ids: (1137663..1137672).to_a },
|
189
|
-
desc: 'Jeremy Allaire - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
|
190
|
-
},
|
191
|
-
genedough: { name: 'Gene Dough',
|
192
|
-
recipe: {
|
193
|
-
time: { start: '2018-12-23', end: '2019-01-07' }, count: 1376,
|
194
|
-
traits: ['hotcocoa', 'mittens', 'frosting'] }
|
195
|
-
},
|
196
|
-
pawrula: { name: 'Pawrula the Bright',
|
197
|
-
recipe: {
|
198
|
-
time: { start: '2018-12-15', end: '2019-11-30' },
|
199
|
-
traits: ['camo', 'butterscotch', 'fox'] },
|
200
|
-
desc: 'Neha Narula - Director of the Digital Currency Initiative at the MIT Media Lab'
|
201
|
-
},
|
202
|
-
|
203
|
-
## November
|
204
|
-
draco: { name: 'Draco',
|
205
|
-
recipe: {
|
206
|
-
time: { start: '2018-11-30', end: '2018-12-07' }, count: 1115,
|
207
|
-
traits: ['toyger', 'martian', 'peppermint', 'dragonwings', 'SE03'] }
|
208
|
-
},
|
209
|
-
dracothemagnificent: { name: 'Draco The Magnificent', date: '2018-11-27',
|
210
|
-
exclusive: {
|
211
|
-
limit: 12, ids: (270..281).to_a }
|
212
|
-
},
|
213
|
-
bugcatv2: { name: 'Bug Cat V2', date: '2018-11-27',
|
214
|
-
exclusive: {
|
215
|
-
limit: 20, ids: (167..186).to_a },
|
216
|
-
desc: 'Bug Bounty II (Offers Contract) Kitty'
|
217
|
-
},
|
218
|
-
dracojunior: { name: 'Draco Junior',
|
219
|
-
recipe: {
|
220
|
-
time: { start: '2018-11-26', end: '2018-12-07' }, count: 1398,
|
221
|
-
traits: ['lynx', 'verdigris', 'dragontail', 'SE03']}
|
222
|
-
},
|
223
|
-
dreggo: { name: 'Dreggo',
|
224
|
-
recipe: {
|
225
|
-
time: { start: '2018-11-21', end: '2018-12-07' }, count: 3624,
|
226
|
-
traits: ['siberian', 'bananacream', 'SE03'] }
|
227
|
-
},
|
228
|
-
pickles: { name: 'Pickles', date: '2018-11-14',
|
229
|
-
recipe: {
|
230
|
-
limit: 303,
|
231
|
-
traits: ['lynx', 'martian', 'highsociety', 'emeraldgreen']}
|
232
|
-
},
|
233
|
-
lilbub: { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13',
|
234
|
-
specialedition: {
|
235
|
-
limit: 468 }
|
236
|
-
},
|
237
|
-
|
238
|
-
lilbubthemagicalspacecat: { name: 'Lil Bub Ub Bub (BUB) The Magical Space Cat', date: '2018-11-13',
|
239
|
-
exclusive: {
|
240
|
-
limit: 3, ids: [266,267,268]}
|
241
|
-
},
|
242
|
-
|
243
|
-
## October
|
244
|
-
dukecat: { name: 'Dukecat', date: '2018-10-18',
|
245
|
-
recipe: {
|
246
|
-
limit: 1366,
|
247
|
-
traits: ['cymric', 'periwinkle', 'simple', 'tongue']}
|
248
|
-
},
|
249
|
-
sheilapurren: { name: 'Sheila Purren', date: '2018-10-04',
|
250
|
-
recipe: {
|
251
|
-
limit: 1971,
|
252
|
-
traits: ['mauveover', 'icy', 'wingtips', 'fangtastic']},
|
253
|
-
desc: 'Sheila Warren Kitty-fied - Head of Blockchain and Distributed Ledger Technology at the World Economic Forum (WEF)'
|
254
|
-
},
|
255
|
-
|
256
|
-
## September
|
257
|
-
pawzilla: { name: 'Pawzilla', date: '2018-09-22',
|
258
|
-
recipe: {
|
259
|
-
limit: 1185,
|
260
|
-
traits: ['jaguar', 'universe', 'atlantis', 'littlefoot']}
|
261
|
-
},
|
262
|
-
vulcat: { name: 'Vulcat', date: '2018-09-12',
|
263
|
-
exclusive: {
|
264
|
-
limit: 1, ids: [1000000] },
|
265
|
-
desc: '1 000 000th Kitty'
|
266
|
-
},
|
267
|
-
meowstro: { name: 'Meowstro', date: '2018-09-09',
|
268
|
-
recipe: {
|
269
|
-
limit: 1698,
|
270
|
-
traits: ['onyx', 'wowza', 'eclipse']}
|
271
|
-
},
|
272
|
-
atlas: { name: 'Atlas', date: '2018-09-07',
|
273
|
-
recipe: {
|
274
|
-
limit: 998,
|
275
|
-
traits: ['highlander', 'kittencream', 'swarley', 'topoftheworld']}
|
276
|
-
},
|
277
|
-
|
278
|
-
## August
|
279
|
-
vulcant: { name: 'Vulcant', date: '2018-08-31',
|
280
|
-
exclusive: {
|
281
|
-
limit: 20, ids: [932914,937360,938299,946526,948925,949058,950617,952280,952981,956374,956908,958570,964205,967234,983046,984451,990713,992861,995745,997469] }
|
282
|
-
},
|
283
|
-
purrity: { name: 'Purrity', date: '2018-08-23',
|
284
|
-
recipe: {
|
285
|
-
limit: 5984,
|
286
|
-
traits: ['selkirk', 'chronic', 'cloudwhite', 'cheeky'] }
|
287
|
-
},
|
288
|
-
rabbidkitty: { name: 'Rabbid Kitty', date: '2018-08-23',
|
289
|
-
exclusive: {
|
290
|
-
limit: 6, ids: (260..265).to_a },
|
291
|
-
desc: 'Ubisoft Blockchain Heroes Hackathon'
|
292
|
-
},
|
293
|
-
squiddlesworth: { name: 'Squiddlesworth', date: '2018-08-16',
|
294
|
-
recipe: {
|
295
|
-
limit: 1510,
|
296
|
-
traits: ['sphynx', 'redvelvet', 'patrickstarfish', 'dragontail'] },
|
297
|
-
desc: 'Lava Squid Cat'
|
298
|
-
},
|
299
|
-
|
300
|
-
## July
|
301
|
-
purrspero: { name: 'Purrspero', date: '2018-07-27',
|
302
|
-
recipe: {
|
303
|
-
limit: 4448,
|
304
|
-
traits: ['dippedcone', 'googly', 'royalpurple', 'beard']}
|
305
|
-
},
|
306
|
-
catbury: { name: 'Catbury', date: '2018-07-25',
|
307
|
-
recipe: {
|
308
|
-
limit: 76,
|
309
|
-
traits: ['ragdoll', 'crazy', 'chocolate', 'mintmacaron', 'yokel', 'WE02']}
|
310
|
-
},
|
311
|
-
honu: { name: 'Honu', date: '2018-07-20',
|
312
|
-
exclusive: {
|
313
|
-
limit: 1, ids: [251] },
|
314
|
-
desc: 'Kitties for Good - Save Turtle Habitats'
|
315
|
-
},
|
316
|
-
victoire: { name: 'Victoire', date: '2018-07-18',
|
317
|
-
exclusive: {
|
318
|
-
limit: 1, ids: [402] },
|
319
|
-
desc: 'France Football World Cup Champion'
|
320
|
-
},
|
321
|
-
lulu: { name: 'Lulu', date: '2018-07-13',
|
322
|
-
recipe: {
|
323
|
-
limit: 999,
|
324
|
-
traits: ['cyan', 'verdigris', 'turtleback', 'salty']}
|
325
|
-
},
|
326
|
-
boot: { name: 'Boot', date: '2018-07-05',
|
327
|
-
recipe: {
|
328
|
-
limit: 1440,
|
329
|
-
traits: ['ganado', 'wiley', 'cerulian', 'rollercoaster'],
|
330
|
-
variants: {
|
331
|
-
belgium: { name: 'Belgium', count: 97, traits: [['orangesoda','onyx']]}, ## Base Color: Orangesoda / Onyx
|
332
|
-
brazil: { name: 'Brazil', count: 195, traits: [['hintomint','bananacream','verdigris']]}, ## Base Color: Hintomint / Bananacream / Verdigris
|
333
|
-
croatia: { name: 'Croatia', count: 253, traits: [['cottoncandy','mauveover','oldlace']]}, ## Base Color: Cottoncandy / Mauveover / Oldlace
|
334
|
-
england: { name: 'England', count: 168, traits: [['greymatter','martian']]}, ## Base Color: Greymatter / Martian
|
335
|
-
france: { name: 'France', count: 317, traits: [['harbourfog','cinderella','lavender']]}, ## Base Color: Harbourfog / Cinderella / Lavender
|
336
|
-
russia: { name: 'Russia', count: 94, traits: [['shadowgrey','salmon','cloudwhite']]}, ## Base Color: Shadowgrey / Salmon/ Cloudwhite
|
337
|
-
sweden: { name: 'Sweden', count: 123, traits: [['brownies','dragonfruit','redvelvet']]}, ## Base Color: Brownies / Dragonfruit / Redvelvet
|
338
|
-
uruguay: { name: 'Uruguay', count: 193, traits: [['aquamarine','nachocheez','koala']]}, ## Base Color: Aquamarine / Nachocheez / Koala
|
339
|
-
}},
|
340
|
-
desc: 'Football World Cup',
|
341
|
-
},
|
342
|
-
## note: boot - different variants for world cup teams
|
343
|
-
## Although there are 8 unique Fancies, they're actually each a variant on the same Fancy - Boot.
|
344
|
-
## Their colours are different, and you can collect all 8 as a set
|
345
|
-
|
346
|
-
## June
|
347
|
-
raspoutine: { name: 'Raspoutine', date: '2018-06-28',
|
348
|
-
recipe: {
|
349
|
-
limit: 1867,
|
350
|
-
traits: ['buzzed', 'nachocheez', 'sandalwood', 'belch']}
|
351
|
-
},
|
352
|
-
furlin: { name: 'Furlin', date: '2018-06-26',
|
353
|
-
exclusive: {
|
354
|
-
limit: 52, ids: (115..126).to_a + (128..166).to_a }
|
355
|
-
},
|
356
|
-
kittypride: { name: 'Kitty Pride', date: '2018-06-21',
|
357
|
-
recipe: {
|
358
|
-
limit: 1316,
|
359
|
-
traits: ['fabulous','cinderella','garnet']}
|
360
|
-
},
|
361
|
-
furrmingo: { name: 'Furrmingo', date: '2018-06-14',
|
362
|
-
recipe: {
|
363
|
-
limit: 333,
|
364
|
-
traits: ['bobtail', 'egyptiankohl', 'flamingo', 'whixtensions']}
|
365
|
-
},
|
366
|
-
|
367
|
-
## May
|
368
|
-
page: { name: 'Page', date: '2018-05-31',
|
369
|
-
recipe: {
|
370
|
-
limit: 50_000,
|
371
|
-
traits: ['rascal', 'peach', 'wasntme' ]}
|
372
|
-
},
|
373
|
-
"schrödingerscat": { name: "Schrödinger's Cat", date: '2018-05-20',
|
374
|
-
recipe: {
|
375
|
-
limit: 73,
|
376
|
-
traits: ['forgetmenot','tinybox','PU20','SE25']}
|
377
|
-
},
|
378
|
-
chatplongeur: { name: 'Chat Plongeur', date: '2018-05-19',
|
379
|
-
recipe: {
|
380
|
-
limit: 1910,
|
381
|
-
traits: ['aquamarine', 'skyblue', 'seafoam'] }
|
382
|
-
},
|
383
|
-
docpurr: { name: 'Doc Purr', date: '2018-05-16',
|
384
|
-
recipe: {
|
385
|
-
limit: 250,
|
386
|
-
traits: ['persian','spock','raisedbrow','violet','tongue'] }
|
387
|
-
},
|
388
|
-
celestialcyberdimension: { name: 'Celestial Cyber Dimension', date: '2018-05-12',
|
389
|
-
exclusive: {
|
390
|
-
limit: 1, ids: [127] }
|
391
|
-
},
|
392
|
-
swish: { name: 'Swish', date: '2018-05-08',
|
393
|
-
recipe: {
|
394
|
-
limit: 2880,
|
395
|
-
traits: ['norwegianforest', 'luckystripe', 'thicccbrowz', 'orangesoda'] }
|
396
|
-
},
|
397
|
-
|
398
|
-
## April
|
399
|
-
flutterbee: { name: 'Flutterbee', date: '2018-04-28',
|
400
|
-
recipe: {
|
401
|
-
limit: 275,
|
402
|
-
traits: ['cloudwhite','jaguar','lemonade','azaleablush','WE14'] }
|
403
|
-
},
|
404
|
-
vernon: { name: 'Vernon', date: '2018-04-16',
|
405
|
-
recipe: {
|
406
|
-
limit: 320,
|
407
|
-
traits: ['amur','fabulous','cottoncandy','springcrocus','belleblue','soserious']},
|
408
|
-
desc: 'Spring Equinox Kitty' ## first, see https://www.cryptokitties.co/kitty/696398
|
409
|
-
},
|
410
|
-
|
411
|
-
## March
|
412
|
-
berry: { name: 'Berry', date: '2018-03-16',
|
413
|
-
recipe: {
|
414
|
-
limit: 200,
|
415
|
-
traits: ['dragonfruit','thunderstruck','emeraldgreen','apricot','simple'] }
|
416
|
-
},
|
417
|
-
pussforprogress: { name: 'Puss For Progress', date: '2018-03-08',
|
418
|
-
recipe: {
|
419
|
-
limit: 1920,
|
420
|
-
traits: ['himalayan','peach','safetyvest','gerbil'] },
|
421
|
-
desc: "Women's Day"
|
422
|
-
},
|
423
|
-
fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', date: '2018-03-08',
|
424
|
-
recipe: {
|
425
|
-
limit: 888,
|
426
|
-
traits: ['harbourfog','calicool','swampgreen','sapphire','beard']}
|
427
|
-
}, ## todo: check date for china launch specials!!!
|
428
|
-
goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', date: '2018-03-08',
|
429
|
-
exclusive: {
|
430
|
-
limit: 1, ids: [888] },
|
431
|
-
desc: 'China Launch'
|
432
|
-
}, ## todo: check date for china launch specials!!!
|
433
|
-
goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', date: '2018-03-08',
|
434
|
-
exclusive: {
|
435
|
-
limit: 11, ids: [1802,1803,1805,1806,1808,1809,1812,1816]+(1825..1828).to_a },
|
436
|
-
desc: 'China Launch'
|
437
|
-
}, ## todo: check date for china launch specials!!!
|
438
|
-
liondance: { name: 'Lion Dance', name_cn: '咚咚锵', date: '2018-03-07',
|
439
|
-
recipe: {
|
440
|
-
limit: 888, overflow: 1, ## use count 889 ?? - why? why not?
|
441
|
-
traits: ['manx','royalblue','googly','starstruck']}
|
442
|
-
},
|
443
|
-
dogcat: { name: 'Dog Cat', name_cn: '汪星爷', date: '2018-03-02',
|
444
|
-
recipe: {
|
445
|
-
limit: 88,
|
446
|
-
traits: ['tigerpunk','periwinkle','barkbrown','sweetmeloncakes','yokel']},
|
447
|
-
desc: 'Year of the Dog (Greater China)'
|
448
|
-
},
|
449
|
-
knightkitty: { name: 'Knight Kitty', date: '2018-03-01',
|
450
|
-
exclusive: {
|
451
|
-
limit: 11, ids: (104..114).to_a }
|
452
|
-
},
|
453
|
-
|
454
|
-
## February
|
455
|
-
tabby: { name: 'Tabby', date: '2018-02-26',
|
456
|
-
recipe: {
|
457
|
-
limit: 250,
|
458
|
-
traits: ['ragamuffin','morningglory','otaku','cheeky'] }
|
459
|
-
},
|
460
|
-
yuricatsuki: { name: 'Yuri Catsuki', date: '2018-02-20',
|
461
|
-
recipe: {
|
462
|
-
limit: 250,
|
463
|
-
traits: ['cymric','tiger','neckbeard','elk'] },
|
464
|
-
desc: 'Figure Scating Kitty - Winter Olympics (Korea)'
|
465
|
-
},
|
466
|
-
misterpurrfect: { name: 'Mister Purrfect', date: '2018-02-14',
|
467
|
-
recipe: {
|
468
|
-
limit: 1000,
|
469
|
-
traits: ['chocolate','baddate','strawberry','wuvme'] },
|
470
|
-
desc: "Valentine's Day"
|
471
|
-
},
|
472
|
-
earnie: { name: 'Earnie', date: '2018-02-13',
|
473
|
-
recipe: {
|
474
|
-
limit: 500,
|
475
|
-
traits: ['birman','orangesoda','hotrod','grim'] },
|
476
|
-
desc: 'Earn.com - Golden Kitty Award (Product Hunt)'
|
477
|
-
},
|
478
|
-
cathena: { name: 'Cathena', date: '2018-02-06',
|
479
|
-
exclusive: {
|
480
|
-
limit: 1, ids: [500000] },
|
481
|
-
desc: '500 000th Kitty'
|
482
|
-
},
|
483
|
-
|
484
|
-
## January
|
485
|
-
'momo-chan': { name: 'Momo-chan', date: '2018-01-31',
|
486
|
-
recipe: {
|
487
|
-
limit: 500,
|
488
|
-
traits: ['onyx','henna','bloodred','wolfgrey','sass'] },
|
489
|
-
desc: 'Ninja Kitty'
|
490
|
-
},
|
491
|
-
negato: { name: 'Negato', date: '2018-01-29',
|
492
|
-
recipe: {
|
493
|
-
limit: 500,
|
494
|
-
traits: ['onyx','henna','wolfgrey','slyboots'] },
|
495
|
-
desc: 'Ninja Kitty'
|
496
|
-
},
|
497
|
-
stitches: { name: 'Stitches', date: '2018-01-10',
|
498
|
-
recipe: {
|
499
|
-
limit: 500,
|
500
|
-
traits: ['hintomint','seafoam','swampgreen','saycheese'] },
|
501
|
-
desc: 'Zombie Kitty'
|
502
|
-
},
|
503
|
-
|
504
|
-
## 2017
|
505
|
-
## December
|
506
|
-
phuziqaat: { name: 'Phu Ziqaat', date: '2017-12-31',
|
507
|
-
recipe: {
|
508
|
-
limit: 1000,
|
509
|
-
traits: ['chartreux','spock','alien','pouty'] },
|
510
|
-
desc: 'Alien Kitty'
|
511
|
-
},
|
512
|
-
santaclaws: { name: 'Santa Claws', date: '2017-12-12',
|
513
|
-
recipe: {
|
514
|
-
limit: 1000, overflow: 2,
|
515
|
-
traits: ['cloudwhite','scarlet','beard','wild_d'] },
|
516
|
-
desc: 'Ho Ho Ho - Santa Claus Kitty'
|
517
|
-
},
|
518
|
-
mistletoe: { name: 'Mistletoe', date: '2017-12-09',
|
519
|
-
recipe: {
|
520
|
-
limit: 2000,
|
521
|
-
traits: ['oldlace','crazy','gerbil'] },
|
522
|
-
desc: "XMas Kitty"
|
523
|
-
},
|
524
|
-
dracula: { name: 'Dracula', date: '2017-12-01',
|
525
|
-
recipe: {
|
526
|
-
limit: 2000,
|
527
|
-
traits: ['laperm','spock','strawberry','WE01'] }
|
528
|
-
},
|
529
|
-
|
530
|
-
## November
|
531
|
-
ducat: { name: 'Du Cat', date: '2017-11-29',
|
532
|
-
recipe: {
|
533
|
-
limit: 10_000,
|
534
|
-
traits: ['cymric','tongue']}
|
535
|
-
},
|
536
|
-
genesis: { name: 'Genesis', date: '2017-11-24',
|
537
|
-
exclusive: {
|
538
|
-
limit: 1, ids: [1] },
|
539
|
-
desc: '1st Kitty'
|
540
|
-
},
|
541
|
-
shipcat: { name: 'Ship Cat', date: '2017-11-23',
|
542
|
-
recipe: {
|
543
|
-
limit: 2000,
|
544
|
-
traits: ['sphynx','orangesoda','luckystripe','crazy']}
|
545
|
-
},
|
546
|
-
bugcat: { name: 'Bug Cat', date: '2017-11-23',
|
547
|
-
exclusive: {
|
548
|
-
limit: 3, ids: [101,102,103] },
|
549
|
-
desc: 'Bug Bounty Kitty' }
|
550
|
-
}
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
class Fancy
|
5
|
+
|
6
|
+
def self.special_editions() @@special_editions ||= []; end # special edition fancies
|
7
|
+
def self.exclusives() @@exclusives ||= []; end # exclusive fancies
|
8
|
+
def self.fancies() @@fancies ||= []; end # "normal" fancies
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
def self.fancies_by_key() @@fancies_by_key ||= {}; end
|
13
|
+
def self.fancies_by_name() @@fancies_by_name ||= {}; end
|
14
|
+
|
15
|
+
def self.find_by_key( key )
|
16
|
+
## note: use (always) a **symbol** for key lookup for now
|
17
|
+
@@fancies_by_key[ key.downcase.to_sym ]
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find_by_name( name )
|
21
|
+
## note: allow string AND symbols (thus, use .to_s !!!)
|
22
|
+
## allow spaces e.g. Bug Cat is the same as BugCat
|
23
|
+
## note: downcase name e.g. allow BugCat too (not just Bug Cat)
|
24
|
+
@@fancies_by_name[ name.gsub( / /, '' ).downcase.to_s ]
|
25
|
+
end
|
26
|
+
|
27
|
+
## add "generic" convenience find helper
|
28
|
+
def self.find_by( **kwargs )
|
29
|
+
if kwargs[ :key ]
|
30
|
+
find_by_key( kwargs[ :key ] )
|
31
|
+
elsif kwargs[ :name ]
|
32
|
+
find_by_name( kwargs[ :name] )
|
33
|
+
else
|
34
|
+
## todo/fix: throw argument except!!!
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.[]( key )
|
40
|
+
if key.is_a? Symbol ## e.g. :genesis, :bugcat, etc.
|
41
|
+
f = find_by_key( key )
|
42
|
+
f = find_by_name( key ) if f.nil? ## try fancy name next - why? why not?
|
43
|
+
f
|
44
|
+
else ## assume string
|
45
|
+
f = find_by_name( key ) ## search by key next - why? why not?
|
46
|
+
f
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def self.each
|
52
|
+
@@fancies_by_key.each do |(key,fancy)|
|
53
|
+
yield( fancy )
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.size() @@fancies_by_key.size; end ## todo: add length alias too? why? why not?
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
attr_accessor :key,
|
64
|
+
:name,
|
65
|
+
:name_cn,
|
66
|
+
:date,
|
67
|
+
:desc,
|
68
|
+
:exclusive,
|
69
|
+
:specialedition,
|
70
|
+
:recipe,
|
71
|
+
:count,
|
72
|
+
:limit,
|
73
|
+
:ids
|
74
|
+
|
75
|
+
def initialize( **kwargs )
|
76
|
+
update( kwargs )
|
77
|
+
end
|
78
|
+
|
79
|
+
def update( **kwargs )
|
80
|
+
kwargs.each do |name,value|
|
81
|
+
send( "#{name}=", value ) ## use "regular" plain/classic attribute setter
|
82
|
+
end
|
83
|
+
self ## return self for chaining
|
84
|
+
end
|
85
|
+
|
86
|
+
def exclusive?() @exclusive.nil? == false; end
|
87
|
+
def specialedition?() @specialedition.nil? == false; end
|
88
|
+
alias_method :special_edition?, :specialedition?
|
89
|
+
def recipe?() @recipe.nil? == false; end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
## auto-fill
|
94
|
+
FANCIES.each do |key,h|
|
95
|
+
|
96
|
+
date_str = h[:date]
|
97
|
+
date_str = h[:recipe][:time][:start] if date_str.nil? && h[:recipe]
|
98
|
+
date_str = h[:specialedition][:time][:start] if date_str.nil? && h[:specialedition]
|
99
|
+
|
100
|
+
date = Date.strptime( date_str, '%Y-%m-%d' )
|
101
|
+
|
102
|
+
|
103
|
+
name = h[:name]
|
104
|
+
name_cn = h[:name_cn] # add chinese name if present
|
105
|
+
desc = h[:desc]
|
106
|
+
|
107
|
+
exclusive = h[:exclusive]
|
108
|
+
specialedition = h[:specialedition]
|
109
|
+
recipe = h[:recipe]
|
110
|
+
|
111
|
+
attribs = {
|
112
|
+
key: key,
|
113
|
+
date: date,
|
114
|
+
name: name,
|
115
|
+
name_cn: name_cn,
|
116
|
+
desc: desc,
|
117
|
+
exclusive: exclusive,
|
118
|
+
specialedition: specialedition,
|
119
|
+
recipe: recipe,
|
120
|
+
}
|
121
|
+
|
122
|
+
|
123
|
+
## todo: check for overflow - if overflow use limit+overflow = count
|
124
|
+
## add traits and time windows
|
125
|
+
if exclusive
|
126
|
+
attribs = attribs.merge( limit: h[:exclusive][:limit],
|
127
|
+
count: h[:exclusive][:count],
|
128
|
+
ids: h[:exclusive][:ids] )
|
129
|
+
elsif specialedition
|
130
|
+
attribs = attribs.merge( limit: h[:specialedition][:limit],
|
131
|
+
count: h[:specialedition][:count] )
|
132
|
+
else ## assume "normal/regular" fancy with recipes
|
133
|
+
attribs = attribs.merge( limit: h[:recipe][:limit],
|
134
|
+
count: h[:recipe][:count] )
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
fancy = Fancy.new( **attribs )
|
139
|
+
pp fancy
|
140
|
+
|
141
|
+
if fancy.exclusive?
|
142
|
+
exclusives << fancy
|
143
|
+
elsif fancy.special_edition?
|
144
|
+
special_editions << fancy
|
145
|
+
else ## assume "normal/regular" fancy (with recipe)
|
146
|
+
fancies << fancy
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
## note: key MUST be a symbol (NOT a string)
|
151
|
+
fancies_by_key[key] = fancy
|
152
|
+
|
153
|
+
## note: downcase name and remove all spaces e.g. Bug Cat => bugcat
|
154
|
+
fancies_by_name[name.gsub( / /, '' ).downcase] = fancy
|
155
|
+
fancies_by_name[name_cn] = fancy if name_cn ## add chinese name too if present
|
156
|
+
end
|
157
|
+
|
158
|
+
end # class Fancy
|