Top Level Namespace

Defined Under Namespace

Modules: Kitties Classes: Cattribute, Cattributes, Fancy, Gene, GenesPage, Genome, GenomeTables, Kittyverse, Recipe, Trait, TraitType, Traits

Constant Summary collapse

MUTATION_TIER =

Tier 0 (Base) (1-g)

Tier 1 (Mewtation I)    (h-p)
Tier 2 (Mewtation II)   (q-t)
Tier 3 (Mewtation III)  (u,v)
Tier 4 (Mewtation IIII) (w)      # note: use IIII instead of IV
{    ## todo/fix: use an algo to calculate - why? why not?
  '1' => 0,
  '2' => 0,
  '3' => 0,
  '4' => 0,
  '5' => 0,
  '6' => 0,
  '7' => 0,
  '8' => 0,
  '9' => 0,
  'a' => 0,
  'b' => 0,
  'c' => 0,
  'd' => 0,
  'e' => 0,
  'f' => 0,
  'g' => 0,
  'h' => 1,
  'i' => 1,
  'j' => 1,
  'k' => 1,
  'm' => 1,
  'n' => 1,
  'o' => 1,
  'p' => 1,
  'q' => 2,
  'r' => 2,
  's' => 2,
  't' => 2,
  'u' => 3,
  'v' => 3,
  'w' => 4,
  'x' => nil
}
MUTATION_TIER_ROMAN =

(quick ā€˜nā€™ dirty) kai to mutation/mewtation tier level in roman numerals (I,II,III,IIII) - as strings (and nil)

{
  '1' => '',
  '2' => '',
  '3' => '',
  '4' => '',
  '5' => '',
  '6' => '',
  '7' => '',
  '8' => '',
  '9' => '',
  'a' => '',
  'b' => '',
  'c' => '',
  'd' => '',
  'e' => '',
  'f' => '',
  'g' => '',
  'h' => 'I',
  'i' => 'I',
  'j' => 'I',
  'k' => 'I',
  'm' => 'I',
  'n' => 'I',
  'o' => 'I',
  'p' => 'I',
  'q' => 'II',
  'r' => 'II',
  's' => 'II',
  't' => 'II',
  'u' => 'III',
  'v' => 'III',
  'w' => 'IIII',
  'x' => ''          ## Use nil and NOT empty string "" - why? why not?
}
MUTATION_PAIR =
{
  '1' => '',   ## todo: use nil for "" - why? why not?
  '2' => '',
  '3' => '',
  '4' => '',
  '5' => '',
  '6' => '',
  '7' => '',
  '8' => '',
  '9' => '',
  'a' => '',
  'b' => '',
  'c' => '',
  'd' => '',
  'e' => '',
  'f' => '',
  'g' => '',
  'h' => '1+2',
  'i' => '3+4',
  'j' => '5+6',
  'k' => '7+8',
  'm' => '9+a',
  'n' => 'b+c',
  'o' => 'd+e',
  'p' => 'f+g',
  'q' => 'h+i',
  'r' => 'j+k',
  's' => 'm+n',
  't' => 'o+p',
  'u' => 'q+r',
  'v' => 's+t',
  'w' => 'u+v',
  'x' => ''
}
MEWTATION_TIER =

add alias(es)

MUTATION_TIER
MEWTATION_TIER_ROMAN =
MUTATION_TIER_ROMAN
MEWTATION_PAIR =
MUTATION_PAIR
COLORS_BODY =

31 colors body

{
 meowgarine:      "#fcfc95",
 cornflower:      "#7592fc",
 icicle:          "#c5e2ff",
 hotcocoa:        "#5e4a47",
 firstblush:      "#fcd0f8",
 tundra:          "#dbccbf",
 glacier:         "#ccffff",
 hyacinth:        "#a45de2",
 shamrock:        "#50c878",
 shadowgrey:      "#b1b1be",
 salmon:          "#f4a792",
 orangesoda:      "#f7bc56",
 cottoncandy:     "#ecd1eb",
 mauveover:       "#ded0ee",
 aquamarine:      "#add5d2",
 nachocheez:      "#fcda86",
 harbourfog:      "#afb4d5",
 cinderella:      "#5ab0f1",
 greymatter:      "#d1dadf",
 brownies:        "#b78662",
 dragonfruit:     "#ec79f2",
 hintomint:       "#d0ead2",
 bananacream:     "#f8f8e0",
 cloudwhite:      "#ffffff",
 oldlace:         "#ffebe9",
 koala:           "#85828a",
 lavender:        "#bc99ff",
 redvelvet:       "#f77272",
 verdigris:       "#73ffc3",
 onyx:            "#42414c",
 martian:         "#a4ff6f"
}
COLORS_EYES =

31 colors eyes

{
 olive:           "#729100",
 pinefresh:       "#177a25",
 oasis:           "#ccffef",
 dioscuri:        "#0ba09c",
 isotope:         "#e4ff73",
 bridesmaid:      "#ffc2df",
 downbythebay:    "#83b293",
 gemini:          "#ffd150",
 kaleidoscope:    "#bcba5e",
 thundergrey:     "#828282",
 gold:            "#fcdf35",
 topaz:           "#0ba09c",
 mintgreen:       "#43edac",
 sizzurp:         "#7c40ff",
 chestnut:        "#a56429",
 strawberry:      "#ef4b62",
 sapphire:        "#4c7aef",
 forgetmenot:     "#4eb4f9",
 dahlia:          "#b8bdff",
 coralsunrise:    "#ff9088",
 doridnudibranch: "#fa9fff",
 parakeet:        "#49b749",
 cyan:            "#45f0f4",
 pumpkin:         "#ffa039",
 limegreen:       "#aef72f",
 bubblegum:       "#ef52d1",
 twilightsparkle: "#ba8aff",
 palejade:        "#c3d8cf",
 eclipse:         "#484c5b",
 babypuke:        "#bcba5e",
 autumnmoon:      "#ffe8bb"
}
COLORS_SECONDARY =

31 colors secondary

{
 cyborg:          "#959cae",
 ooze:            "#daea31",
 peppermint:      "#00a86b",
 inflatablepool:  "#4fb9c5",
 prairierose:     "#e0115f",
 springcrocus:    "#ab7fef",
 egyptiankohl:    "#4a4855",
 poisonberry:     "#773c5f",
 lilac:           "#e5e5f9",
 apricot:         "#f4a45b",
 royalpurple:     "#cf5be8",
 padparadscha:    "#ffd5c7",
 swampgreen:      "#44e192",
 violet:          "#765be8",
 scarlet:         "#ea5f5a",
 barkbrown:       "#886662",
 coffee:          "#756650",
 lemonade:        "#ffef85",
 chocolate:       "#c47e33",
 butterscotch:    "#ffce6c",
 safetyvest:      "#b0f852",
 turtleback:      "#387573",
 rosequartz:      "#ffaefb",
 wolfgrey:        "#737184",
 cerulian:        "#385877",
 skyblue:         "#83d5ff",
 garnet:          "#f4679a",
 universe:        "#494981",
 royalblue:       "#5b6ee8",
 mertail:         "#36f2bc",
 pearl:           "#fff8fa"
}
COLORS_TERTIARY =

31 colors tertiary

{
 hanauma:         "#7accb5",
 belleblue:       "#afd0f7",
 peach:           "#f9cfad",
 granitegrey:     "#b1aeb9",
 kittencream:     "#f7ebda",
 emeraldgreen:    "#8be179",
 bloodred:        "#ff7a7a",
 daffodil:        "#fff09f",
 sandalwood:      "#b8916c",
 icy:             "#eef8f8",
 flamingo:        "#ec87ba",
 seafoam:         "#9eeec5",
 azaleablush:     "#ffccd8",
 morningglory:    "#887cff",
 purplehaze:      "#dad6e1",
 missmuffett:     "#f4b3f0",
 summerbonnet:    "#cbb0ff",
 mallowflower:    "#c170b1",
 fallspice:       "#ff9331",
 dreamboat:       "#fd6cd5",
 periwinkle:      "#cacaff",
 frosting:        "#ffdce6",
 patrickstarfish: "#ffad97",
 mintmacaron:     "#b0f1f4",
 shale:           "#585666",
 cashewmilk:      "#f9efef",
 buttercup:       "#f4e65d",
 cobalt:          "#5262db",
 sully:           "#70f9f9",
 kalahari:        "#ffcf8a",
 atlantis:        "#2a7f96"
}
COLORS =
{}.merge( COLORS_BODY )
.merge( COLORS_EYES )
.merge( COLORS_SECONDARY )
.merge( COLORS_TERTIARY )
TRAITS =

ordered by gene position (0,1,3.4,5,ā€¦ etc.)

12 traits (4 genes each)
{
  body: {
    genes: '0-3',
    name:  'Fur',  code: 'FU',
    kai: {
    '1' => 'Savannah',
    '2' => 'Selkirk',
    '3' => 'Chantilly',
    '4' => 'Birman',
    '5' => 'Koladiviya',
    '6' => 'Bobtail',
    '7' => 'Manul',
    '8' => 'Pixiebob',
    '9' => 'Siberian',
    'a' => 'Cymric',
    'b' => 'Chartreux',
    'c' => 'Himalayan',
    'd' => 'Munchkin',
    'e' => 'Sphynx',
    'f' => 'Ragamuffin',
    'g' => 'Ragdoll',
    'h' => 'Norwegianforest',
    'i' => 'Mekong',
    'j' => 'Highlander',
    'k' => 'Balinese',
    'm' => 'Lynx',
    'n' => 'Mainecoon',
    'o' => 'Laperm',
    'p' => 'Persian',
    'q' => 'Fox',
    'r' => 'Kurilian',
    's' => 'Toyger',
    't' => 'Manx',
    'u' => 'Lykoi',
    'v' => 'Burmilla',
    'w' => 'Liger',
    'x' => ''
    }
  },
  pattern: {
    genes: '4-7',
    name: 'Pattern', code: 'PA',
    kai: {
    '1' => 'Vigilante',
    '2' => 'Tiger',
    '3' => 'Rascal',
    '4' => 'Ganado',
    '5' => 'Leopard',
    '6' => 'Camo',
    '7' => 'Rorschach',
    '8' => 'Spangled',
    '9' => 'Calicool',
    'a' => 'Luckystripe',
    'b' => 'Amur',
    'c' => 'Jaguar',
    'd' => 'Spock',
    'e' => 'Mittens',
    'f' => 'Totesbasic 1',   ## use totesbasic_f or totesbasic (14) - why? why not?
    'g' => 'Totesbasic 2',   ## use totesbasic_g or totesbasic (15)
    'h' => 'Splat',
    'i' => 'Thunderstruck',
    'j' => 'Dippedcone',
    'k' => 'Highsociety',
    'm' => 'Tigerpunk',
    'n' => 'Henna',
    'o' => 'Arcreactor',
    'p' => 'Totesbasic 3',   ## use totesbasic_p or totesbasic (23) - why? why not?
    'q' => 'Scorpius',
    'r' => 'Razzledazzle',
    's' => 'Hotrod',
    't' => 'Allyouneed',
    'u' => 'Avatar',
    'v' => 'Gyre',
    'w' => 'Moonrise',
    'x' => ''
    }
  },
  coloreyes: {
    genes: '8-11',
    name:  'Eye Color', code: 'EC',
    kai: {
    '1' => 'Thundergrey',
    '2' => 'Gold',
    '3' => 'Topaz',
    '4' => 'Mintgreen',
    '5' => 'Isotope',
    '6' => 'Sizzurp',
    '7' => 'Chestnut',
    '8' => 'Strawberry',
    '9' => 'Sapphire',
    'a' => 'Forgetmenot',
    'b' => 'Dahlia',
    'c' => 'Coralsunrise',
    'd' => 'Olive',
    'e' => 'Doridnudibranch',
    'f' => 'Parakeet',
    'g' => 'Cyan',
    'h' => 'Pumpkin',
    'i' => 'Limegreen',
    'j' => 'Bridesmaid',
    'k' => 'Bubblegum',
    'm' => 'Twilightsparkle',
    'n' => 'Palejade',
    'o' => 'Pinefresh',
    'p' => 'Eclipse',
    'q' => 'Babypuke',
    'r' => 'Downbythebay',
    's' => 'Autumnmoon',
    't' => 'Oasis',
    'u' => 'Gemini',
    'v' => 'Dioscuri',
    'w' => 'Kaleidoscope',
    'x' => ''
    }
  },
  eyes: {
    genes: '12-15',
    name: 'Eye Shape', code: 'ES',     ##  eye type
    kai: {
    '1' => 'Swarley',
    '2' => 'Wonky',
    '3' => 'Serpent',
    '4' => 'Googly',
    '5' => 'Otaku',
    '6' => 'Simple',
    '7' => 'Crazy',
    '8' => 'Thicccbrowz',
    '9' => 'Caffeine',
    'a' => 'Wowza',
    'b' => 'Baddate',
    'c' => 'Asif',
    'd' => 'Chronic',
    'e' => 'Slyboots',
    'f' => 'Wiley',
    'g' => 'Stunned',
    'h' => 'Chameleon',
    'i' => 'Alien',
    'j' => 'Fabulous',
    'k' => 'Raisedbrow',
    'm' => 'Tendertears',
    'n' => 'Hacker',
    'o' => 'Sass',
    'p' => 'Sweetmeloncakes',
    'q' => 'Oceanid',
    'r' => 'Wingtips',
    's' => 'Firedup',
    't' => 'Buzzed',
    'u' => 'Bornwithit',
    'v' => 'Candyshoppe',
    'w' => 'Drama',
    'x' => ''
    }
  },
  colorprimary: {
    genes: '16-19',
    name: 'Base Color', code: 'BC',   ##  color1 / colorprimary / body color
    kai: {
    '1' => 'Shadowgrey',
    '2' => 'Salmon',
    '3' => 'Meowgarine',
    '4' => 'Orangesoda',
    '5' => 'Cottoncandy',
    '6' => 'Mauveover',
    '7' => 'Aquamarine',
    '8' => 'Nachocheez',
    '9' => 'Harbourfog',
    'a' => 'Cinderella',
    'b' => 'Greymatter',
    'c' => 'Tundra',
    'd' => 'Brownies',
    'e' => 'Dragonfruit',
    'f' => 'Hintomint',
    'g' => 'Bananacream',
    'h' => 'Cloudwhite',
    'i' => 'Cornflower',
    'j' => 'Oldlace',
    'k' => 'Koala',
    'm' => 'Lavender',
    'n' => 'Glacier',
    'o' => 'Redvelvet',
    'p' => 'Verdigris',
    'q' => 'Icicle',
    'r' => 'Onyx',
    's' => 'Hyacinth',
    't' => 'Martian',
    'u' => 'Hotcocoa',
    'v' => 'Shamrock',
    'w' => 'Firstblush',
    'x' => ''
    }
  },
  colorsecondary: {
    genes: '20-23',
    name:  'Highlight Color', code: 'HC',    ## color2 / colorsecondary / sec color / pattern color
    kai: {
    '1' => 'Cyborg',
    '2' => 'Springcrocus',
    '3' => 'Egyptiankohl',
    '4' => 'Poisonberry',
    '5' => 'Lilac',
    '6' => 'Apricot',
    '7' => 'Royalpurple',
    '8' => 'Padparadscha',
    '9' => 'Swampgreen',
    'a' => 'Violet',
    'b' => 'Scarlet',
    'c' => 'Barkbrown',
    'd' => 'Coffee',
    'e' => 'Lemonade',
    'f' => 'Chocolate',
    'g' => 'Butterscotch',
    'h' => 'Ooze',
    'i' => 'Safetyvest',
    'j' => 'Turtleback',
    'k' => 'Rosequartz',
    'm' => 'Wolfgrey',
    'n' => 'Cerulian',
    'o' => 'Skyblue',
    'p' => 'Garnet',
    'q' => 'Peppermint',
    'r' => 'Universe',
    's' => 'Royalblue',
    't' => 'Mertail',
    'u' => 'Inflatablepool',
    'v' => 'Pearl',
    'w' => 'Prairierose',
    'x' => ''
    }
  },
  colortertiary: {
    genes: '24-27',
    name: 'Accent Color', code: 'AC',   ## color3 / colortertiary
    kai: {
    '1' => 'Belleblue',
    '2' => 'Sandalwood',
    '3' => 'Peach',
    '4' => 'Icy',
    '5' => 'Granitegrey',
    '6' => 'Cashewmilk',
    '7' => 'Kittencream',
    '8' => 'Emeraldgreen',
    '9' => 'Kalahari',
    'a' => 'Shale',
    'b' => 'Purplehaze',
    'c' => 'Hanauma',
    'd' => 'Azaleablush',
    'e' => 'Missmuffett',
    'f' => 'Morningglory',
    'g' => 'Frosting',
    'h' => 'Daffodil',
    'i' => 'Flamingo',
    'j' => 'Buttercup',
    'k' => 'Bloodred',
    'm' => 'Atlantis',
    'n' => 'Summerbonnet',
    'o' => 'Periwinkle',
    'p' => 'Patrickstarfish',
    'q' => 'Seafoam',
    'r' => 'Cobalt',
    's' => 'Mallowflower',
    't' => 'Mintmacaron',
    'u' => 'Sully',
    'v' => 'Fallspice',
    'w' => 'Dreamboat',
    'x' => ''
    }
  },
  wild: {
    genes: '28-31',
    name: 'Wild Element', code: 'WE',
    kai: {
    'h' => 'Littlefoot',
    'i' => 'Elk',
    'j' => 'Ducky',
    'k' => 'Trioculus',
    'm' => 'Daemonwings',
    'n' => 'Featherbrain',
    'o' => 'Flapflap',
    'p' => 'Daemonhorns',
    'q' => 'Dragontail',
    'r' => 'Aflutter',
    's' => 'Foghornpawhorn',
    't' => 'Unicorn',
    'u' => 'Dragonwings',
    'v' => 'Alicorn',
    'w' => 'Wyrm',
    'x' => ''
    }
  },
  mouth: {
    genes: '32-35',
    name:  'Mouth', code: 'MO',
    kai: {
    '1' => 'Whixtensions',
    '2' => 'Wasntme',
    '3' => 'Wuvme',
    '4' => 'Gerbil',
    '5' => 'Confuzzled',
    '6' => 'Impish',
    '7' => 'Belch',
    '8' => 'Rollercoaster',
    '9' => 'Beard',
    'a' => 'Pouty',
    'b' => 'Saycheese',
    'c' => 'Grim',
    'd' => 'Fangtastic',
    'e' => 'Moue',
    'f' => 'Happygokitty',
    'g' => 'Soserious',
    'h' => 'Cheeky',
    'i' => 'Starstruck',
    'j' => 'Samwise',
    'k' => 'Ruhroh',
    'm' => 'Dali',
    'n' => 'Grimace',
    'o' => 'Majestic',
    'p' => 'Tongue',
    'q' => 'Yokel',
    'r' => 'Topoftheworld',
    's' => 'Neckbeard',
    't' => 'Satiated',
    'u' => 'Walrus',
    'v' => 'Struck',
    'w' => 'Delite',
    'x' => ''
   }
  },
  environment: {
      genes: '36-39',
      name: 'Environment', code: 'EN',
      kai: {
        'h' => 'Salty',
        'i' => 'Dune',
        'j' => 'Juju',
        'k' => 'Tinybox',
        'm' => 'Myparade',
        'n' => 'Finalfrontier',
        'o' => 'Metime',
        'p' => 'Drift',
        'q' => 'Secretgarden',
        'r' => 'Frozen',
        's' => 'Roadtogold',
        't' => 'Jacked',
        'u' => 'Floorislava',
        'v' => 'Prism',
        'w' => 'Junglebook',
        'x' => ''
      }
  },
  secret: {
      genes: '40-43',
      name: 'Secret Y Gene', code: 'SE',   ## todo: change to Y Gene or Y (see https://guide.cryptokitties.co/guide/cat-features/genes)
      kai: { }
  },
  prestige: {
      genes: '44-47',
      name: 'Purrstige', code: 'PU',
      kai: { }
      ##  prune, furball, duckduckcat, or thatsawrap - more like fancies (not really traits)
  }
}
ALT_TRAIT_TYPE_KEYS =

quick hack - map copycats keys to (internal) cryptokitties trait type keys

note: all keys are the same except:
{
  :color1    => :colorprimary,
  :color2    => :colorsecondary,
  :color3    => :colortertiary,
  :purrstige => :prestige,
  ## add :fur, etc. too - why? why not?
}
ALT_TRAIT_TYPE_NAMES =
{
  'body'             => 'fur',
  'eyes'             => 'eye shape',
  'eye type'         => 'eye shape',
  'body color'       => 'base color',
  'primary color'    => 'base color',
  'base colour'      => 'base color',       # british (canadian) spelling
  'secondary color'  => 'highlight color',
  'sec color'        => 'highlight color',
  'pattern color'    => 'highlight color',
  'highlight colour' => 'highlight color',  # british (canadian) spelling
  'tertiary color'   => 'accent color',
  'accent colour'    => 'accent color',     # british (canadian) spelling
  'wild'             => 'wild element',
  'secret'           => 'secret y gene',
  'prestige'         => 'purrstige',
}
ALT_TRAIT_NAMES =
{
  'totesbasic (14)' => 'totesbasic 1',
  'totesbasic (15)' => 'totesbasic 2',
  'totesbasic (23)' => 'totesbasic 3',
  'totesbasic_14'   => 'totesbasic 1',
  'totesbasic_15'   => 'totesbasic 2',
  'totesbasic_23'   => 'totesbasic 3',
  'totesbasic 14'   => 'totesbasic 1',
  'totesbasic 15'   => 'totesbasic 2',
  'totesbasic 23'   => 'totesbasic 3',

  'totesbasic (f)'  => 'totesbasic 1',
  'totesbasic (g)'  => 'totesbasic 2',
  'totesbasic (p)'  => 'totesbasic 3',
  'totesbasic f'    => 'totesbasic 1',
  'totesbasic g'    => 'totesbasic 2',
  'totesbasic p'    => 'totesbasic 3',
  'totesbasic_f'    => 'totesbasic 1',
  'totesbasic_g'    => 'totesbasic 2',
  'totesbasic_p'    => 'totesbasic 3',

  'totesbasic_1'    => 'totesbasic 1',
  'totesbasic_2'    => 'totesbasic 2',
  'totesbasic_3'    => 'totesbasic 3',
}
TOTESBASIC =

note: totesbasic has three traits / genes

['Totesbasic 1', 'Totesbasic 2', 'Totesbasic 3']
ANY_TOTESBASIC =
ALL_TOTESBASIC = TOTESBASIC
SPECIAL_EDITIONS =

note:

for time limits for fancies use:
   e.g. time: { end: '2018-12-07' }   # until dec/7

for overflows for limited edition use:
   e.g. overflow: 1      #   888+1  (=889)
{
  'kitt-e': { name: 'KITT-E', date: '2019-05-10',
              specialedition: {
                limit: 500 },
              desc: 'Dapper (Crypto Contract) Wallet Promotion Cat'
            },
  # Apr 10, 2019
  # Sparkles Special Edition Cat is released.Special Edition Cat
  sparkles: { name: 'Sparkles', date: '2019-04-10',
              specialedition: {
                limit: 100 },
              desc: 'Freebie for CryptoKitties Community Events'
            },
  ##
  ## date: '2019-01-10 ???  -- use for date "announced" or something - why? why not?
  aeoncat: { name: 'Aeoncat',
              specialedition: {
                time: { start: '2019-01-17', end: '2019-01-28' },
                limit: 380 },    ## Don't sleep - there's only 380 up for grabs!
              desc: 'Goddess Aeona - Goddess of Nature - Gods Unchained Promotion'
           },
  ## 2018
  ## December
  catzy: { name: 'Catzy', date: '2018-12-31',
           specialedition: {
             limit: 10, ids: (1137653..1137662).to_a },
           desc: 'Changpeng "CZ" Zhao - CEO of Binance - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
         },
  purremyallaire: { name: 'Purremy Allaire', date: '2018-12-31',
                    specialedition: {
                      limit: 10, ids: (1137663..1137672).to_a },
                    desc: 'Jeremy Allaire - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
                  },
  lilbub:      { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13',
                 specialedition: {
                   limit: 468 }
               },
}
EXCLUSIVES =
{
  'dapp-e': { name: 'DAPP-E', date: '2019-05-10',
              exclusive: {
                limit: 50, ids: (1829..1878).to_a },
              desc: 'Dapper (Crypto Contract) Wallet Promotion Cat'
            },
  papacatuanuku: { name: 'Papacatuanuku', date: '2019-03-31',
                   exclusive: {
                     limit: 1, ids: [1500000] },
                   desc: 'Kitty #1500000'
                 },
  # Mar 26, 2019
  # Sir Meowsalot Exclusive Cat is released. Exclusive Cat
  sirmeowsalot: { name: 'Sir Meowsalot', date: '2019-03-26',
                  exclusive: {
                    limit: 21, ids: (201..221).to_a }
                },

  cyberberry: { name: 'Cyber Berry', date: '2019-03-02',
                exclusive: {
                  limit: 1, ids: [282] },
                desc: "Winner of the NFTme Sweetstakes"
              },

  # Mar 1, 2019
  # Hinecatone Exclusive Cat is discovered. Exclusive Cat
  hinecatone: { name: 'Hinecatone', date: '2019-03-01',
                exclusive: {
                  limit: 15, ids: [1423547, 1433380, 1433486, 1440835, 1453366, 1456935, 1456973, 1459319, 1463197, 1466118, 1474082, 1484593, 1484982, 1492154, 1498885]}
              },

  # Feb 15, 2019
  # Felono Exclusive Cat is discovered. Exclusive Cat
  felono: { name: 'Felono', date: '2019-02-15',
            exclusive: {
              limit: 30, ids: [1394641, 1404595, 1406021, 1413065, 1414375, 1420553, 1421315, 1421864, 1424104 ,1425433, 1431823, 1435517, 1436333, 1449860, 1451482, 1455458, 1459320, 1462952, 1463069, 1476999, 1483225, 1487210, 1487551, 1489681, 1490345, 1491632, 1492206, 1492739, 1492817, 1498778]}
          },
  hypurrion: { name: 'Hypurrion', date: '2019-01-10',
               exclusive: {
                 limit: 1, ids: [269]},
               desc: 'Hyperion - Mythic Titan of Light - Gods Unchained Promotion'
             },
  dracothemagnificent:  { name: 'Draco The Magnificent', date: '2018-11-27',
                          exclusive: {
                            limit: 12, ids:	(270..281).to_a }
                        },
  bugcatv2:             { name: 'Bug Cat V2', date: '2018-11-27',
                          exclusive: {
                            limit: 20, ids: (167..186).to_a },
                          desc: 'Bug Bounty II (Offers Contract) Kitty'
                        },
  lilbubthemagicalspacecat: { name: 'Lil Bub Ub Bub (BUB) The Magical Space Cat', date: '2018-11-13',
                              exclusive: {
                                limit: 3, ids: [266,267,268]}
                            },
  vulcat:   { name: 'Vulcat', date: '2018-09-12',
              exclusive: {
                limit: 1, ids: [1000000] },
              desc: '1 000 000th Kitty'
            },
  vulcant:        { name: 'Vulcant', date: '2018-08-31',
                    exclusive: {
                      limit: 20, ids: [932914,937360,938299,946526,948925,949058,950617,952280,952981,956374,956908,958570,964205,967234,983046,984451,990713,992861,995745,997469] }
                  },
  rabbidkitty:    { name: 'Rabbid Kitty', date: '2018-08-23',
                    exclusive: {
                       limit: 6, ids: (260..265).to_a },
                    desc: 'Ubisoft Blockchain Heroes Hackathon'
                  },
 honu:           { name: 'Honu', date: '2018-07-20',
                   exclusive: {
                     limit: 1, ids: [251] },
                   desc: 'Kitties for Good - Save Turtle Habitats'
                 },
 victoire:       { name: 'Victoire', date: '2018-07-18',
                   exclusive: {
                     limit: 1, ids: [402] },
                   desc: 'France Football World Cup Champion'
                 },
  furlin:        { name: 'Furlin', date: '2018-06-26',
                   exclusive: {
                     limit: 52, ids: (115..126).to_a + (128..166).to_a }
                 },
  celestialcyberdimension: { name: 'Celestial Cyber Dimension', date: '2018-05-12',
                             exclusive: {
                               limit: 1, ids: [127] }
                           },
  goldendragoncat: { name: 'Golden Dragon Cat', name_cn: 'åøé¾™å–µ', date: '2018-03-08',
                     exclusive: {
                       limit: 1, ids: [888] },
                     desc: 'China Launch'
                   }, ## todo: check date for china launch specials!!!
  goldendogcat:    { name: 'Golden Dog Cat', name_cn: 'ę—ŗč“¢ę±Ŗ', date: '2018-03-08',
                     exclusive: {
                       limit: 11, ids: [1802,1803,1805,1806,1808,1809,1812,1816]+(1825..1828).to_a },
                     desc: 'China Launch'
                   },  ## todo: check date for china launch specials!!!

  knightkitty:  { name: 'Knight Kitty',  date: '2018-03-01',
                  exclusive: {
                    limit: 11, ids: (104..114).to_a }
                },
  cathena:         { name: 'Cathena',  date: '2018-02-06',
                    exclusive: {
                      limit: 1, ids: [500000] },
                    desc: '500 000th Kitty'
                  },
  genesis:      { name: 'Genesis', date: '2017-11-24',
                  exclusive: {
                    limit: 1, ids: [1] },
                  desc: '1st Kitty'
                },
  bugcat:       { name: 'Bug Cat', date: '2017-11-23',
                  exclusive: {
                    limit: 3, ids: [101,102,103] },
                  desc: 'Bug Bounty Kitty' }
}
RECIPES =
{
  'curdlin': { name: 'Curdlin',
                recipe: {
                  time: { start: '2019-05-11', end: '2019-11-30' }, count: 4,
                  traits: ['nachocheez', 'saycheese', 'missmuffett', 'dippedcone']},
                desc: 'Cheeze Wizard Cat - Celebrating the Launch of the Cheeze Wizards on the Blockchain'
                ## see https://www.cryptokitties.co/blog/post/things-are-getting-cheezy-in-cryptokitties
             },
  ##
  # Apr 27, 2019
  # Krakitten Fancy Cat is discovered. Fancy Cat
  krakitten: { name: 'Krakitten',
               recipe: {
                 time: { start: '2019-04-27', end: '2019-05-06' }, count: 1221,
                 traits: ['cobalt', 'ducky', 'salty', 'splat']},
                 ## desc: 'Beware the Krakitten in the briny deep.'
             },
  # Apr 13, 2019
  # Furbeard Fancy Cat is discovered. Fancy Cat
  furbeard: { name: 'Furbeard',
              recipe: {
                time: { start: '2019-04-13', end: '2019-04-26'}, count: 3733,
                traits: ['inflatablepool', 'hanauma', 'neckbeard']},
                desc: 'Dread Pirate Cat'   # Avast Ye! This Old Salt knows a few tricks: how to avoid a meowtiny, how to get out of swabbing the litter deck, and just where the captain's log is buried.
                ## see https://www.cryptokitties.co/blog/post/pirate-cats-are-plundering-cryptokitties/
            },

  # Mar 30, 2019
  # Glitter Fancy Cat is discovered. Fancy Cat
  glitter: { name: 'Glitter',
             recipe: {
               time: { start: '2019-03-30', end: '2019-11-30'},  count: 658,   ## note: ++count NOT FINAL!!!
               traits: ['rorschach', 'juju', 'unicorn', 'hyacinth'] }
           },

  # Mar 16, 2019
  # Clover Fancy Cat is discovered. Fancy Cat
  clover: { name: 'Clover', date: '2019-03-16',
            recipe: {
              limit: 2506,
              traits: ['shamrock', 'emeraldgreen', 'roadtogold', 'PU27'] },
            desc: "Celebrating St. Patrick's Day 2019 (March/19th)"
          },

  # Mar 2, 2019
  # Glasswalker Fancy Cat is discovered. Fancy Cat
  glasswalker: { name: 'Glasswalker', date: '2019-03-02',
                 recipe: {
                   limit: 1230,
                   traits: ['cloudwhite', 'henna', 'pearl', 'firedup'] },
                 desc: "Ninja Fancy Cat"
                },

  # Feb 21, 2019
  # Ande Fancy Cat is discovered. Fancy Cat
  ande: { name: 'Ande', date: '2019-02-21',
          recipe: {
            limit: 440,
            traits: ['munchkin', 'cashewmilk', 'moue', 'PU30', 'WE10'] }
        },
  # Feb 17, 2019
  # Al Fancy Cat is discovered. Fancy Cat
  al: { name: 'Al',
        recipe: {
          time: { start: '2019-02-17', end: '2019-12-01'}, count: 3209, ## note: count NOT FINAL!!!
          traits: ['munchkin','moue','cashewmilk','brownies'] }
      },
  # Feb 16, 2019
  # Pizzazz Fancy Cat is discovered.Fancy Cat
  pizzazz: { name: 'Pizzazz',
             recipe: {
               time: { start: '2019-02-16', end: '2019-12-01'}, count: 1438, ## note: count NOT FINAL!!!
               traits: ['mekong', 'scarlet', 'spangled', 'wonky'] }
           },

  # Feb 9, 2019
  # Miss Purrfect Fancy Cat is discovered.Fancy Cat
  misspurrfect: { name: 'Miss Purrfect',
                  recipe: {
                    time: { start: '2019-02-09', end: '2019-02-14'}, count: 1298,
                    traits: ['allyouneed', 'butterscotch', 'asif', 'satiated', 'flapflap']},
                  desc: "Celebrating St. Valentine's Day 2019 (Feb/14th)"
                  ## see https://www.cryptokitties.co/blog/post/how-to-breed-miss-purrfect/
                },

  ## 2019
  ## January

  # Jan 26, 2019
  # Squib Fancy Cat is discovered. Fancy Cat
  squib: { name: 'Squib', date: '2019-01-26',
           recipe: {
             limit: 1443,    ## todo/check:  check if time-windows?
             traits: ['oldlace', 'razzledazzle', 'buzzed', 'rollercoaster']},
           desc: 'Celebrating American Football Super Bowl LIII in 2019'
           ## see https://www.cryptokitties.co/blog/post/how-to-breed-squib/
         },

  tallythepurrocious: { name: 'Tally The Purrocious',
                        recipe: {
                          time: { start: '2019-01-10', end: '2019-01-21' }, count: 3992,
                          traits: ['selkirk', 'koala', 'arcreactor', 'sully'] },
                        desc: 'Gods Unchained Promotion - Mystical Cat Talisman'
                      },

  genedough: { name: 'Gene Dough',
               recipe: {
                 time: { start: '2018-12-23', end: '2019-01-07' }, count: 1376,
                 traits: ['hotcocoa', 'mittens', 'frosting'] }
            },
  pawrula:  { name: 'Pawrula the Bright',
              recipe: {
                 time: { start: '2018-12-15', end: '2019-11-30' }, count: 1952,  ## note: count NOT FINAL!!!
                 traits: ['camo', 'butterscotch', 'fox'] },
              desc: 'Neha Narula - Director of the Digital Currency Initiative at the MIT Media Lab'
            },

  ## November
  draco:                { name: 'Draco',
                          recipe: {
                            time: { start: '2018-11-30', end: '2018-12-07' }, count: 1115,
                            traits: ['toyger', 'martian', 'peppermint', 'dragonwings', 'SE03'] }
                        },
  dracojunior: { name: 'Draco Junior',
                 recipe: {
                   time: { start: '2018-11-26', end: '2018-12-07' }, count: 1398,
                   traits: ['lynx', 'verdigris', 'dragontail', 'SE03']}
               },
  dreggo:      { name: 'Dreggo',
                 recipe: {
                   time: { start: '2018-11-21', end: '2018-12-07' }, count: 3624,
                   traits: ['siberian', 'bananacream', 'SE03'] }
               },
  pickles:     { name: 'Pickles', date: '2018-11-14',
                 recipe: {
                   limit: 303,
                   traits: ['lynx', 'martian', 'highsociety', 'emeraldgreen']}
               },
  ## October
  dukecat:       { name: 'Dukecat', date: '2018-10-18',
                   recipe: {
                     limit: 1366,
                     traits: ['cymric', 'periwinkle', 'simple', 'tongue']}
                 },
  sheilapurren:  { name: 'Sheila Purren', date: '2018-10-04',
                   recipe: {
                     limit: 1971,
                     traits: ['mauveover', 'icy', 'wingtips', 'fangtastic']},
                   desc: 'Sheila Warren Kitty-fied - Head of Blockchain and Distributed Ledger Technology at the World Economic Forum (WEF)'
                 },

  ## September
  pawzilla: { name: 'Pawzilla', date: '2018-09-22',
              recipe: {
                limit: 1185,
                traits: ['jaguar', 'universe', 'atlantis', 'littlefoot']}
            },
  meowstro: { name: 'Meowstro', date: '2018-09-09',
              recipe: {
                limit: 1698,
                traits: ['onyx', 'wowza', 'eclipse']}
            },
  atlas:    { name: 'Atlas', date: '2018-09-07',
              recipe: {
                limit: 998,
                traits: ['highlander', 'kittencream', 'swarley', 'topoftheworld']}
            },

  ## August
  purrity:        { name: 'Purrity', date: '2018-08-23',
                    recipe: {
                      limit: 5984,
                      traits: ['selkirk', 'chronic', 'cloudwhite', 'cheeky'] }
                  },
  squiddlesworth: { name: 'Squiddlesworth', date: '2018-08-16',
                    recipe: {
                      limit: 1510,
                      traits: ['sphynx', 'redvelvet', 'patrickstarfish', 'dragontail'] },
                    desc: 'Lava Squid Cat'
                   },

  ## July
  purrspero:      { name: 'Purrspero', date: '2018-07-27',
                    recipe: {
                      limit: 4448,
                      traits: ['dippedcone', 'googly', 'royalpurple', 'beard']}
                  },
  catbury:        { name: 'Catbury', date: '2018-07-25',
                    recipe: {
                      limit: 76,
                      traits: ['ragdoll', 'crazy', 'chocolate', 'mintmacaron', 'yokel', 'WE02']}
                  },
  lulu:           { name: 'Lulu', date: '2018-07-13',
                    recipe: {
                      limit: 999,
                      traits: ['cyan', 'verdigris', 'turtleback', 'salty']}
                  },
  boot:           { name: 'Boot', date: '2018-07-05',
                    recipe: {
                      limit: 1440,
                      traits: ['ganado', 'wiley', 'cerulian', 'rollercoaster'],
                      variants: {
                        belgium: { name: 'Belgium', count: 97,   traits: [['orangesoda','onyx']]},                    ## Base Color: Orangesoda / Onyx
                        brazil:  { name: 'Brazil',  count: 195,  traits: [['hintomint','bananacream','verdigris']]},  ## Base Color: Hintomint / Bananacream / Verdigris
                        croatia: { name: 'Croatia', count: 253,  traits: [['cottoncandy','mauveover','oldlace']]},    ## Base Color: Cottoncandy / Mauveover / Oldlace
                        england: { name: 'England', count: 168,  traits: [['greymatter','martian']]},                 ## Base Color: Greymatter / Martian
                        france:  { name: 'France',  count: 317,  traits: [['harbourfog','cinderella','lavender']]},   ## Base Color: Harbourfog / Cinderella / Lavender
                        russia:  { name: 'Russia',  count: 94,   traits: [['shadowgrey','salmon','cloudwhite']]},     ## Base Color: Shadowgrey / Salmon/ Cloudwhite
                        sweden:  { name: 'Sweden',  count: 123,  traits: [['brownies','dragonfruit','redvelvet']]},   ## Base Color: Brownies / Dragonfruit / Redvelvet
                        uruguay: { name: 'Uruguay', count: 193,  traits: [['aquamarine','nachocheez','koala']]},      ## Base Color: Aquamarine / Nachocheez / Koala
                      }},
                    desc: 'Football World Cup',
                  },
  ## note: boot - different variants for world cup teams
  ##  Although there are 8 unique Fancies, they're actually each a variant on the same Fancy - Boot.
  ##  Their colours are different, and you can collect all 8 as a set

  ## June
  raspoutine:    { name: 'Raspoutine', date: '2018-06-28',
                   recipe: {
                     limit: 1867,
                     traits: ['buzzed', 'nachocheez', 'sandalwood', 'belch']}
                },
  kittypride:    { name: 'Kitty Pride', date: '2018-06-21',
                   recipe: {
                     limit: 1316,
                     traits: ['fabulous','cinderella','garnet']}
                 },
  furrmingo:     { name: 'Furrmingo', date: '2018-06-14',
                   recipe: {
                     limit: 333,
                     traits: ['bobtail', 'egyptiankohl', 'flamingo', 'whixtensions']}
                },

  ## May
  page:              { name: 'Page', date: '2018-05-31',
                       recipe: {
                         limit: 50_000,   count: 3936,  ## note: count NOT FINAL!!!
                         traits: ['rascal', 'peach', 'wasntme' ]}
                     },
  "schrƶdingerscat": { name: "Schrƶdinger's Cat", date: '2018-05-20',
                       recipe: {
                         limit: 73,
                         traits: ['forgetmenot','tinybox','PU20','SE25']}
                     },
  chatplongeur:      { name: 'Chat Plongeur', date: '2018-05-19',
                       recipe: {
                         limit: 1910,
                         traits: ['aquamarine', 'skyblue', 'seafoam'] }
                     },
  docpurr:             { name: 'Doc Purr', date: '2018-05-16',
                         recipe: {
                           limit: 250,
                           traits: ['persian','spock','raisedbrow','violet','tongue'] }
                       },
  swish:               { name: 'Swish', date: '2018-05-08',
                         recipe: {
                           limit: 2880,
                           traits: ['norwegianforest', 'luckystripe', 'thicccbrowz', 'orangesoda'] }
                       },

  ## April
  flutterbee:  { name: 'Flutterbee', date: '2018-04-28',
                 recipe: {
                   limit: 275,
                   traits: ['cloudwhite','jaguar','lemonade','azaleablush','WE14'] }
               },
  vernon:      { name: 'Vernon', date: '2018-04-16',
                 recipe: {
                   limit: 320,
                   traits: ['amur','fabulous','cottoncandy','springcrocus','belleblue','soserious']},
                 desc: 'Spring Equinox Kitty'  ## first, see https://www.cryptokitties.co/kitty/696398
                },

  ## March
  berry:           { name: 'Berry', date: '2018-03-16',
                     recipe: {
                       limit: 200,
                       traits: ['dragonfruit','thunderstruck','emeraldgreen','apricot','simple'] }
                   },
  pussforprogress: { name: 'Puss For Progress', date: '2018-03-08',
                     recipe: {
                       limit: 1920,
                       traits: ['himalayan','peach','safetyvest','gerbil'] },
                     desc: "Women's Day"
                   },
  fortunecat:      { name: 'Fortune Cat', name_cn: 'ēŗ¢åŒ…å–µ', date: '2018-03-08',
                     recipe: {
                       limit: 888,
                       traits: ['harbourfog','calicool','swampgreen','sapphire','beard']}
                    },  ## todo: check date for china launch specials!!!
  liondance:    { name: 'Lion Dance', name_cn: '咚咚锵', date: '2018-03-07',
                  recipe: {
                    limit: 888, overflow: 1,  ## use count 889 ?? - why? why not?
                    traits: ['manx','royalblue','googly','starstruck']}
                },
  dogcat:       { name: 'Dog Cat',    name_cn: 'ę±Ŗꘟēˆ·', date: '2018-03-02',
                  recipe: {
                    limit: 88,
                    traits: ['tigerpunk','periwinkle','barkbrown','sweetmeloncakes','yokel']},
                  desc: 'Year of the Dog (Greater China)'
                },

  ## February
  tabby:           { name: 'Tabby', date: '2018-02-26',
                     recipe: {
                       limit: 250,
                       traits: ['ragamuffin','morningglory','otaku','cheeky'] }
                   },
  yuricatsuki:     { name: 'Yuri Catsuki',  date: '2018-02-20',
                     recipe: {
                       limit: 250,
                       traits: ['cymric','tiger','neckbeard','elk'] },
                     desc: 'Figure Scating Kitty - Winter Olympics (Korea)'
                  },
  misterpurrfect:  { name: 'Mister Purrfect', date: '2018-02-14',
                     recipe: {
                       limit: 1000,
                       traits: ['chocolate','baddate','strawberry','wuvme'] },
                     desc: "Valentine's Day"
                   },
  earnie:          { name: 'Earnie', date: '2018-02-13',
                     recipe: {
                       limit: 500,
                       traits: ['birman','orangesoda','hotrod','grim'] },
                     desc: 'Earn.com - Golden Kitty Award (Product Hunt)'
                   },

  ## January
  'momo-chan':     { name: 'Momo-chan', date: '2018-01-31',
                     recipe: {
                       limit: 500,
                       traits: ['onyx','henna','bloodred','wolfgrey','sass'] },
                      desc: 'Ninja Kitty'
                   },
  negato:          { name: 'Negato', date: '2018-01-29',
                     recipe: {
                       limit: 500,
                       traits: ['onyx','henna','wolfgrey','slyboots'] },
                     desc: 'Ninja Kitty'
                   },
  stitches:        { name: 'Stitches', date: '2018-01-10',
                     recipe: {
                       limit: 500,
                       traits: ['hintomint','seafoam','swampgreen','saycheese'] },
                     desc: 'Zombie Kitty'
                   },

  ## 2017
  ## December
  phuziqaat:    { name: 'Phu Ziqaat', date: '2017-12-31',
                  recipe: {
                    limit: 1000,
                    traits: ['chartreux','spock','alien','pouty'] },
                  desc: 'Alien Kitty'
                },
  santaclaws:   { name: 'Santa Claws', date: '2017-12-12',
                  recipe: {
                    limit: 1000, overflow: 2,
                    traits: ['cloudwhite','scarlet','beard','WE12'] },
                  desc: 'Ho Ho Ho - Santa Claus Kitty'
                },
  mistletoe:    { name: 'Mistletoe', date: '2017-12-09',
                  recipe: {
                    limit: 2000,
                    traits: ['oldlace','crazy','gerbil'] },
                  desc: "XMas Kitty"
                },
  dracula:      { name: 'Dracula', date: '2017-12-01',
                  recipe: {
                    limit: 2000,
                    traits: ['laperm','spock','strawberry','WE01'] }
                },

  ## November
  ducat:        { name: 'Du Cat', date: '2017-11-29',
                  recipe: {
                    limit: 10_000,
                    traits: ['cymric','tongue']}
                },
  shipcat:      { name: 'Ship Cat', date: '2017-11-23',
                  recipe: {
                    limit: 2000,
                    traits: ['sphynx','orangesoda','luckystripe','crazy']}
                }
}
FANCIES =
{}.merge( RECIPES )
.merge( EXCLUSIVES )
.merge( SPECIAL_EDITIONS )
PURRSTIGES_ROBOKITTY =

Purrstige Traits / Cattributes

{
###
# May 1, 2019
#  7 Robokitty Purrstiges
bionic: { name: 'Bionic',
          recipe: {
            time: { start: '2019-05-01', end: '2019-08-31' },
            traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU30'] }
          },
fileshare: { name: 'Fileshare',
             recipe: {
               time: { start: '2019-05-01', end: '2019-08-31' },
               traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU29'] }
           },
pawsfree:  { name: 'Pawsfree',
             recipe: {
               time: { start: '2019-05-01', end: '2019-08-31' },
               traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU28'] }
             },
uplink:  { name: 'Uplink',
           recipe: {
             time: { start: '2019-05-01', end: '2019-08-31' },
             traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU27'] }
           },
gaunlet: { name: 'Gauntlet',
           recipe: {
             time: { start: '2019-05-01', end: '2019-08-31' },
             traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU26'] }
           },
catterypack: { name: 'Catterypack',
               recipe: {
                 time: { start: '2019-05-01', end: '2019-08-31' },
                 traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU25'] }
               },
squelch: { name: 'Squelch',
           recipe: {
             time: { start: '2019-05-01', end: '2019-08-31' },
             traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU24'] }
            }
}
PURRSTIGES_PIRATE =
{
##
# Apr 13, 2019
#  7 Pirate Purrstiges
#  Scratchingpost trait is discovered. Purrstige
scratchingpost: { name: 'Scratchingpost',
                  recipe: {
                    time: { start: '2019-04-13', end: '2019-05-10' }, count: 772,
                    traits: ['WE10', 'PU26'] }
                },
#  Hooked trait is discovered. Purrstige
hooked: { name: 'Hooked',
          recipe: {
            time: { start: '2019-04-13', end: '2019-05-10' }, count: 1277,
            traits: ['WE10', 'PU27'] }
        },
#  Landlubber trait is discovered. Purrstige
landlubber: { name: 'Landlubber',
              recipe: {
                time: { start: '2019-04-13', end: '2019-05-10' }, count: 711,
                traits: ['WE10', 'PU29'] }
            },
# Wrecked trait is discovered. Purrstige
wrecked: { name: 'Wrecked',
           recipe: {
             time: { start: '2019-04-13', end: '2019-05-10' }, count: 959,
             traits: ['EN00', 'PU26'] }
          },
# Purrbados trait is discovered. Purrstige
purrbados: { name: 'Purrbados',
             recipe: {
               time: { start: '2019-04-13', end: '2019-05-10' }, count: 1344,
               traits: ['EN01', 'PU26'] }
            },
# Timbers trait is discovered. Purrstige
timbers: { name: 'Timbers',
           recipe: {
             time: { start: '2019-04-13', end: '2019-05-10' }, count: 472,
             traits: ['WE10', 'EN00', 'PU26'] }
          },
# Maraud trait is discovered. Purrstige
maraud: { name: 'Maraud',
          recipe: {
            time: { start: '2019-04-13', end: '2019-05-10' }, count: 620,
            traits: ['WE10', 'EN01', 'PU26'] }
        }
}
PURRSTIGES_ALPACAT =
{
##
# Feb 21, 2019
#  7 Alpacat "hairstyle" purrstiges
# Dreamcloud trait is discovered. Purrstige
dreamcloud: { name: 'Dreamcloud',
              recipe: {
                time: { start: '2019-02-22', end: '2019-03-25' }, count: 1246,
                traits: ['munchkin', 'WE10', 'PU24'] }
            },
# Alpunka trait is discovered. Purrstige
alpunka: { name: 'Alpunka',
           recipe: {
             time: { start: '2019-02-22', end: '2019-03-25' }, count: 926,
             traits: ['munchkin', 'WE10', 'PU28'] }
         },
# Cindylou trait is discovered. Purrstige
cindylou: { name: 'Cindylou',
            recipe: {
              time: { start: '2019-02-22', end: '2019-03-25' }, count: 905,
              traits: ['munchkin', 'WE10', 'PU30'] }
          },
# Alpacacino trait is discovered. Purrstige
alpacacino: { name: 'Alpacacino',
              recipe: {
                time: { start: '2019-02-22', end: '2019-03-25' }, count: 1220,
                traits: ['munchkin', 'WE10', 'PU27'] }
            },
# Beatlesque trait is discovered. Purrstige
beatlesque: { name: 'Beatlesque',
              recipe: {
                time: { start: '2019-02-22', end: '2019-03-25' }, count: 783,
                traits: ['munchkin', 'WE10', 'PU29'] }
            },
# Huacool trait is discovered. Purrstige
huacool: { name: 'Huacool',
           recipe: {
             time: { start: '2019-02-22', end: '2019-03-25' }, count: 837,
             traits: ['munchkin', 'WE10', 'PU25'] }
          },
# Inaband trait is discovered. Purrstige
inaband: { name: 'Inaband',
           recipe: {
             time: { start: '2019-02-22', end: '2019-03-25' }, count: 1048,
             traits: ['munchkin', 'WE10', 'PU26'] }
        }
}
PRESTIGES =
PURRSTIGES =
{
##
# Mar 15, 2019
# Oohshiny trait is discovered. Purrstige
oohshiny: { name: 'Oohshiny',
           recipe: {
             time: { start: '2019-03-15', end: '2019-03-28'}, count: 2484,
             traits: ['roadtogold', 'PU27'] }
         },

## 2018
## December

reindeer: { name: 'Reindeer',
            recipe: {
              time: { start: '2018-12-14', end: '2019-01-07' }, count: 854,
              traits: ['elk', ['PU24','PU25','PU26','PU27']] }
          },
holidaycheer: { name: 'Holidaycheer',
                recipe: {
                  time: { start: '2018-12-14', end: '2019-01-07' }, count: 759,
                  traits: ['elk', ['PU28','PU29']] }
              },
 lit:      { name: 'Lit',
             recipe: {
               time: { start: '2018-12-14', end: '2019-01-07' }, count: 1006,
               traits: ['elk', 'PU30'] }
           },

## October
 ## date: '2018-10-21' ??
 thatsawrap:  { name: 'Thatsawrap',
                recipe: {
                  time: { start: '2018-10-20', end: '2018-11-06' }, count: 615,
                  traits: ['bobtail','WE00','PU28'] }
             },
 ## date: '2018-10-19' ??
 duckduckcat: { name: 'Duckduckcat',
                recipe: {
                  time: { start: '2018-10-20', end: '2018-11-15' }, count: 1249,
                  traits: ['neckbeard',['PU24','PU25','PU26']] }
              },

## September
 ## date: '2018-09-19' ??
 prune:   { name: 'Prune',
            recipe: {
              time: { start: '2018-09-18', end: '2018-09-30' }, count: 921,
              traits: ['norwegianforest', TOTESBASIC, 'PU25'] }
         },
 furball:  { name: 'Furball',
             recipe: {
               time: { start: '2018-09-19', end: '2018-09-30' }, count: 998,
               traits: ['norwegianforest', TOTESBASIC, 'PU26'] }
           }
}.merge( PURRSTIGES_ROBOKITTY )
.merge( PURRSTIGES_PIRATE )
.merge( PURRSTIGES_ALPACAT )
TRAITS_TIMELINE =
{
  ## 2018
  ## november
  dune:           { date: '2018-11-21' },
  secretgarden:   { date: '2018-11-21' },
  floorislava:    { date: '2018-11-21' },
  junglebook:     { date: '2018-11-21' },

  meowgarine:     { date: '2018-11-16' },
  cornflower:     { date: '2018-11-16' },
  icicle:         { date: '2018-11-16' },
  hotcocoa:       { date: '2018-11-16' },
  firstblush:     { date: '2018-11-16' },

  featherbrain:   { date: '2018-11-13' },
  foghornpawhorn: { date: '2018-11-13' },
  alicorn:        { date: '2018-11-13' },
  wyrm:           { date: '2018-11-13' },

  mittens:        { date: '2018-11-06' },
  arcreactor:     { date: '2018-11-06' },
  allyouneed:     { date: '2018-11-06' },
  gyre:           { date: '2018-11-06' },
  moonrise:       { date: '2018-11-06' },

  ## october
  metime:      { date: '2018-10-26' },
  jacked:      { date: '2018-10-26' },
  prism:       { date: '2018-10-26' },

  isotope:     { date: '2018-10-23' },
  bridesmaid:   { date: '2018-10-23' },
  downbythebay: { date: '2018-10-23' },
  gemini:       { date: '2018-10-23' },
  kaleidoscope: { date: '2018-10-23' },

  siberian: { date: '2018-10-17' },
  lynx: { date: '2018-10-17' },
  toyger:  { date: '2018-10-17' },
  burmilla:  { date: '2018-10-17' },
  liger:  { date: '2018-10-17' },

  moue: { date: '2018-10-10' },
  majestic: { date: '2018-10-10' },
  satiated: { date: '2018-10-10' },
  struck: { date: '2018-10-10' },
  delite: { date: '2018-10-10' },

  myparade: { date: '2018-10-03' },
  roadtogold: { date: '2018-10-03' },


  ## september
  dreamboat: { date: '2018-09-21' },
  fallspice: { date: '2018-09-21' },
  mallowflower: { date: '2018-09-21' },
  hanauma: { date: '2018-09-21' },
  summerbonnet: { date: '2018-09-21' },

  firedup: { date: '2018-09-06' },
  hacker: { date: '2018-09-06' },
  drama: { date: '2018-09-06' },
  candyshoppe: { date: '2018-09-06' },

  asif: { date: '2018-09-05' },

  ## august
  dragonwings: { date: '2018-08-29' },
  aflutter: { date: '2018-08-29' },
  ducky: { date: '2018-08-29' },

  chantilly: { date: '2018-08-23' },
  mekong: { date: '2018-08-23' },
  fox: { date: '2018-08-23' },
  lykoi: { date: '2018-08-23' },

  tundra: { date: '2018-08-17' },
  glacier: { date: '2018-08-17' },
  hyacinth: { date: '2018-08-17' },
  shamrock: { date: '2018-08-17' },

  inflatablepool: { date: '2018-08-08' },
  peppermint: { date: '2018-08-08' },
  ooze: { date: '2018-08-08' },
  cyborg: { date: '2018-08-08' },

  scorpius: { date: '2018-08-01' },
  splat:   { date: '2018-08-01' },
  vigilante:  { date: '2018-08-01' },
  avatar:   { date: '2018-08-01' },

  ## july
  topoftheworld: { date: '2018-07-25' },
  confuzzled:  { date: '2018-07-25' },
  samwise: { date: '2018-07-25' },
  walrus: { date: '2018-07-25' },

  olive: { date: '2018-07-20' },
  pinefresh: { date: '2018-07-20' },
  oasis: { date: '2018-07-20' },
  dioscuri: { date: '2018-07-20' },

  juju: { date: '2018-07-18' },
  frozen: { date: '2018-07-18' },

  kalahari: { date: '2018-07-13' },
  atlantis: { date: '2018-07-13' },

  fangtastic: { date: '2018-07-06' },

  ## june
  littlefoot: { date: '2018-06-29' },
  dragontail: { date: '2018-06-29' },

  padparadscha: { date: '2018-06-28' },
  rosequartz:   { date: '2018-06-28' },
  universe:     { date: '2018-06-28' },

  martian:   { date: '2018-06-22' },
  redvelvet: { date: '2018-06-22' },
  brownies:  { date: '2018-06-22' },

  wowza: { date: '2018-06-19' },
  tendertears: { date: '2018-06-19' },

  impish: { date: '2018-06-14' },

  finalfrontier:  { date: '2018-06-11' },

  cobalt:     { date: '2018-06-09' },
  cashewmilk: { date: '2018-06-09' },
  buttercup:  { date: '2018-06-09' },

  manul:  { date: '2018-06-05' },
  balinese: { date: '2018-06-05' },
  kurilian: { date: '2018-06-05' },

  ## may
  unicorn:  { date: '2018-05-31' },
  flapflap: { date: '2018-05-31' },

  dahlia:    { date: '2018-05-29' },
  palejade:  { date: '2018-05-29' },
  autumnmoon: { date: '2018-05-29' },

  razzledazzle: { date: '2018-05-24' },
  highsociety:  { date: '2018-05-24' },
  rorschach:    { date: '2018-05-24' },

  tinybox: { date: '2018-05-19' },

  butterscotch: { date: '2018-05-10' },
  garnet:  { date: '2018-05-10' },
  mertail: { date: '2018-05-10' },
  pearl:   { date: '2018-05-10' },

  highlander:  { date: '2018-05-08' },
  koladiviya:  { date: '2018-05-08' },

  swarley: { date: '2018-05-04' },
  oceanid: { date: '2018-05-04' },
  chameleon: { date: '2018-05-04' },
  bornwithit: { date: '2018-05-04' },

  ## april
  cinderella: { date: '2018-04-27' },
  lavender:   { date: '2018-04-27' },

  daemonhorns: { date: '2018-04-24' },
  salty:       { date: '2018-04-24' },

  shale: { date: '2018-04-19' },

  eclipse:  { date: '2018-04-17' },
  parakeet: { date: '2018-04-17' },

  daemonwings:   { date: '2018-04-13' },

  caffeine:      { date: '2018-04-10' },

  frosting:         { date: '2018-04-02' },
  patrickstarfish:  { date: '2018-04-02' },
  mintmacaron:      { date: '2018-04-02' },


  ## march
  doridnudibranch:  { date: '2018-03-30' },

  springcrocus:     { date: '2018-03-20' },

  thunderstruck:    { date: '2018-03-16' },
  rascal:           { date: '2018-03-16' },

  dragonfruit:  { date: '2018-03-14' },

  belch:  { date: '2018-03-09' },

  pixiebob:    { date: '2018-03-08' },
  poisonberry: { date: '2018-03-08' },
  safetyvest:  { date: '2018-03-08' },

  cyan:  { date: '2018-03-05' },


  ## february
  missmuffett: { date: '2018-02-28' },
  wiley:      { date: '2018-02-28' },

  dippedcone:   { date: '2018-02-23' },
  leopard:      { date: '2018-02-23' },

  harbourfog:   { date: '2018-02-20' },

  baddate:      { date: '2018-02-13' },

  wuvme:  { date: '2018-02-12' },
  yokel:  { date: '2018-02-12' },
  starstruck:  { date: '2018-02-12' },

  egyptiankohl: { date: '2018-02-09' },
  bobtail: { date: '2018-02-09' },

  tiger: { date: '2018-02-06' },

  birman: { date: '2018-02-02' },
  coralsunrise: { date: '2018-02-02' },

  ## january
  forgetmenot: { date: '2018-01-30' },
  savannah: { date: '2018-01-30' },
  norwegianforest: { date: '2018-01-30' },
  twilightsparkle: { date: '2018-01-30' },

  trioculus: { date: '2018-01-26' },

  morningglory: { date: '2018-01-20' },
  apricot:      { date: '2018-01-20' },
  turtleback:   { date: '2018-01-20' },
  wasntme:      { date: '2018-01-20' },
  cheeky:       { date: '2018-01-20' },

  sapphire:     { date: '2018-01-17' },

  nachocheez:  { date: '2018-01-14' },
  koala:       { date: '2018-01-14' },
  chronic:     { date: '2018-01-14' },
  onyx:        { date: '2018-01-14' },
  sass:        { date: '2018-01-14' },

  slyboots:   { date: '2018-01-13' },

  azaleablush:   { date: '2018-01-10' },
  spangled:      { date: '2018-01-10' },

  lilac:         { date: '2018-01-09' },
  bananacream:   { date: '2018-01-09' },
  verdigris:     { date: '2018-01-09' },

  neckbeard:    { date: '2018-01-06' },
  grim:         { date: '2018-01-06' },
  grimace:      { date: '2018-01-06' },
  stunned:      { date: '2018-01-06' },

  wonky:        { date: '2018-01-04' },
  babypuke:     { date: '2018-01-04' },
  pumpkin:      { date: '2018-01-04' },

  thundergrey:   { date: '2018-01-03' },


  ## 2017
  ## december
  selkirk:       { date: '2017-12-31' },
  icy:           { date: '2017-12-31' },
  flamingo:      { date: '2017-12-31' },
  seafoam:       { date: '2017-12-31' },

  elk:           { date: '2017-12-28' },

  hintomint:      { date: '2017-12-22' },

  serpent:        { date: '2017-12-20' },
  alien:          { date: '2017-12-20' },
}

Instance Method Summary collapse

Instance Method Details

#dateObject

std libs



4
# File 'lib/kittyverse.rb', line 4

require 'date'

#kitties_fancy_search_url(fancy) ⇒ Object

todo: find a better name - why? why not?



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/kittyverse/links.rb', line 19

def kitties_fancy_search_url( fancy )   ## todo: find a better name - why? why not?

  ## note: use (official) chinese name for search param if present
  param =  fancy.name_cn ? fancy.name_cn : fancy.key

  if fancy.special_edition?
    q = "specialedition:#{param}"    ## todo: urlescape param - why? why not?
  elsif fancy.exclusive?   ## just use fancy too - why? why not?
    q = "exclusive:#{param}"
  else  ## assume "normal/regular" fancy
    q = "fancy:#{param}"
  end

  "https://www.cryptokitties.co/search?include=sale,sire,other&search=#{q}"
end

#kitties_kitty_url(id) ⇒ Object

cryptokitties.co links



7
8
9
# File 'lib/kittyverse/links.rb', line 7

def kitties_kitty_url( id )
  "https://www.cryptokitties.co/kitty/#{id}"
end

#kitties_search_url(q) ⇒ Object



12
13
14
# File 'lib/kittyverse/links.rb', line 12

def kitties_search_url( q )
 "https://www.cryptokitties.co/search?include=sale,sire,other&search=#{q}"
end

#kitties_specialedition_search_url(fancy) ⇒ Object

alias :kitties_special_search_url :kitties_fancy_search_url



36
# File 'lib/kittyverse/links.rb', line 36

def kitties_specialedition_search_url( fancy ) kitties_fancy_search_url( fancy ); end

#media_fancy_pic_url(key, variant_key = nil) ⇒ Object

(old) alias for media_fany_url



52
# File 'lib/kittyverse/links.rb', line 52

def media_fancy_pic_url( key, variant_key=nil ) media_fancy_url( key, variant_key ); end

#media_fancy_url(key, variant_key = nil) ⇒ Object

/media - image links



43
44
45
46
47
48
49
# File 'lib/kittyverse/links.rb', line 43

def media_fancy_url( key, variant_key=nil )    ### todo: find a better name - why? why not?
  if variant_key
    "https://cryptocopycats.github.io/media/kitties/100x100/fancy-#{key}-#{variant_key}.png"
  else
    "https://cryptocopycats.github.io/media/kitties/100x100/fancy-#{key}.png"
  end
end

#media_icon_url(key) ⇒ Object

note: use :unlocked, :locked, etc.



55
56
57
# File 'lib/kittyverse/links.rb', line 55

def media_icon_url( key )   ## note: use :unlocked, :locked, etc.
  "https://cryptocopycats.github.io/media/icons/18x18/#{key}.png"
end