copycats 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5765b3011eacd184d9efd7e2f9cad441ec56ad12
4
- data.tar.gz: 516850d479c1522598076bd7bbd7b8ed739bae6e
3
+ metadata.gz: e2c6eb5ce1a08788c4f1fa3ca5ece8aa980fd282
4
+ data.tar.gz: '09b5543d21a4cebd5e465fa6e4062d3816902fdf'
5
5
  SHA512:
6
- metadata.gz: e12e8cd5f3b18a7fb120f44f1c7b5e49f11cda1d9b2ffc3cbcc5771089affb24d5df070fd7d0c64479f90edb3b0858049d18f86e6356f1b3d2253d5436e6e83b
7
- data.tar.gz: b881568d4ccc9f303f46ce54e9981d422d7f090843da23fbf8e2f565ec7417bc17d93cbd66c96ec05bdb20d2cc272e94237cb40b6d2dff995715a835741e8b13
6
+ metadata.gz: e0f694fec6aa4139d28c23ca652e7ab50e39bece57bcbb09914097da70f1804aedf0860f39db14f88fa4d4cbb280d045d12fa652cac4d0792724597f975a5baa
7
+ data.tar.gz: 6b91cecc1caa19df875427e196e9021df1b728c5ec7e4f18590b8bcf51cc804943f6e83e674bb3e04a69c65dcdd20b6d9a891553b02a11b5bfe7dd2d02ca163d
File without changes
@@ -1,14 +1,15 @@
1
- HISTORY.md
1
+ CHANGELOG.md
2
2
  LICENSE.md
3
3
  Manifest.txt
4
4
  README.md
5
5
  Rakefile
6
6
  bin/kitty
7
7
  lib/copycats.rb
8
- lib/copycats/data.rb
9
8
  lib/copycats/fancies.rb
10
9
  lib/copycats/gene.rb
11
10
  lib/copycats/genome.rb
11
+ lib/copycats/import/read.rb
12
+ lib/copycats/import/setup.rb
12
13
  lib/copycats/models/kitty.rb
13
14
  lib/copycats/reports/genes.rb
14
15
  lib/copycats/reports/kitty.rb
@@ -17,6 +18,7 @@ lib/copycats/reports/traits.rb
17
18
  lib/copycats/schema.rb
18
19
  lib/copycats/tool.rb
19
20
  lib/copycats/traits.rb
21
+ lib/copycats/traits_timeline.rb
20
22
  lib/copycats/version.rb
21
23
  test/helper.rb
22
24
  test/test_genome.rb
data/Rakefile CHANGED
@@ -15,13 +15,13 @@ Hoe.spec 'copycats' do
15
15
 
16
16
  # switch extension to .markdown for gihub formatting
17
17
  self.readme_file = 'README.md'
18
- self.history_file = 'HISTORY.md'
18
+ self.history_file = 'CHANGELOG.md'
19
19
 
20
20
  self.extra_deps = [
21
- ['base32-kai'],
21
+ ['base32-alphabets', '>= 1.0.0'],
22
+ ['csvreader', '>= 1.2.3'],
22
23
  ['activerecord'],
23
24
  ['sqlite3'],
24
- ['csvreader']
25
25
  ]
26
26
 
27
27
  self.licenses = ['Public Domain']
@@ -14,19 +14,21 @@ require 'logger' # note: use for ActiveRecord::Base.logger -- remove/replace
14
14
  ## 3rd party gems
15
15
  require 'active_record' ## todo: add sqlite3? etc.
16
16
 
17
- require 'base32-kai' ## base32 / kai encoding / decoding for genes
17
+ require 'base32-alphabets' ## base32 / kai encoding / decoding for genes
18
18
  require 'csvreader'
19
19
 
20
20
 
21
+
21
22
  ## our own code
22
23
  require 'copycats/version' # note: let version always go first
23
24
  require 'copycats/traits'
25
+ require 'copycats/traits_timeline'
26
+
24
27
  require 'copycats/fancies'
25
28
  require 'copycats/gene'
26
29
  require 'copycats/genome'
27
30
 
28
31
  require 'copycats/schema'
29
- require 'copycats/data'
30
32
 
31
33
  require 'copycats/models/kitty'
32
34
 
@@ -35,6 +37,9 @@ require 'copycats/reports/mix'
35
37
  require 'copycats/reports/genes'
36
38
  require 'copycats/reports/traits'
37
39
 
40
+ require 'copycats/import/setup'
41
+ require 'copycats/import/read'
42
+
38
43
  require 'copycats/tool'
39
44
 
40
45
 
@@ -4,50 +4,174 @@
4
4
  #
5
5
  # for latest updates on new fancies/exclusives see:
6
6
  # https://updates.cryptokitties.co (official latest updates/timeline)
7
+ #
8
+ # or see
9
+ # https://blog.kotobaza.co/timeline/
10
+
7
11
 
12
+ ##
13
+ ## note:
14
+ ## for time limits for fancies use:
15
+ ## e.g. time: { end: '2018-12-07' } # until dec/7
16
+ ##
17
+ ## for overflows for limited edition use:
18
+ ## e.g. overflow: 1 # 888+1 (=889)
8
19
 
9
- ## todo: add formula: []
10
20
 
11
21
  FANCIES =
12
22
  {
13
- bugcat: { name: 'Bug Cat', limit: 3, date: '2017-11-23', exclusive: true, ids: [101,102,103] },
14
- shipcat: { name: 'Ship Cat', limit: 2_000, date: '2017-11-23' },
23
+ ## 2018
24
+ ## November
25
+ draco: { name: 'Draco', date: '2018-11-30', time: { end: '2018-12-07' },
26
+ traits: ['toyger', 'martian', 'peppermint', 'dragonwings', 'SE03']},
27
+ dracothemagnificent: { name: 'Draco The Magnificent', date: '2018-11-27', limit: 12, exclusive: true, ids: (270..281).to_a },
28
+ bugcatv2: { name: 'Bug Cat V2', date: '2018-11-27', limit: 20, exclusive: true, ids: (167..186).to_a, desc: 'Bug Bounty II (Offers Contract) Kitty' },
29
+ dracojunior: { name: 'Draco Junior', date: '2018-11-26', time: { end: '2018-12-07' },
30
+ traits: ['lynx', 'verdigris', 'dragontail', 'SE03']},
31
+ dreggo: { name: 'Dreggo', date: '2018-11-21', time: { end: '2018-12-07' },
32
+ traits: ['siberian', 'bananacream', 'SE03']},
33
+ pickles: { name: 'Pickles', date: '2018-11-14', limit: 303,
34
+ traits: ['lynx', 'martian', 'highsociety', 'emeraldgreen']},
35
+ lilbub: { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13', limit: 42, special: true }, ## for search use specialedition:
36
+
37
+ lilbubthemagicalspacecat: { name: 'Lil Bub Ub Bub (BUB) The Magical Space Cat', date: '2018-11-13', limit: 3, exclusive: true, ids: [266,267,268] },
38
+
39
+ ## October
40
+ thatsawrap: { name: 'Thatsawrap', date: '2018-10-21', limit: 615, time: { start: '2018-10-20', end: '2018-11-06' }, prestige: true,
41
+ traits: ['bobtail','WE00','PU28']},
42
+ duckduckcat: { name: 'Duckduckcat', date: '2018-10-19', limit: 1249, time: { start: '2018-10-20', end: '2018-11-15' }, prestige: true,
43
+ traits: ['neckbeard',['PU24','PU25','PU26']]}, ## Purrstige: PU24 / PU25 / PU26
44
+
45
+ dukecat: { name: 'Dukecat', date: '2018-10-18', limit: 1366,
46
+ traits: ['cymric', 'periwinkle', 'simple', 'tongue']},
47
+ sheilapurren: { name: 'Sheila Purren', date: '2018-10-04', limit: 1971, desc: 'Sheila Warren Kitty-fied - Head of Blockchain and Distributed Ledger Technology at the World Economic Forum (WEF)',
48
+ traits: ['mauveover', 'icy', 'wingtips', 'fangtastic']},
49
+
50
+ ## September
51
+ pawzilla: { name: 'Pawzilla', date: '2018-09-22', limit: 1185,
52
+ traits: ['jaguar', 'universe', 'atlantis', 'littlefoot']},
53
+ prune: { name: 'Prune', date: '2018-09-19', limit: 921, time: { start: '2018-09-18', end: '2018-09-30' }, prestige: true,
54
+ traits: ['norwegianforest', 'totesbasic', 'PU25']}, ## todo/fix: check totesbasic - three genes!!! - check which one PA15?
55
+ furball: { name: 'Furball', date: '2018-09-19', limit: 998, time: { start: '2018-09-19', end: '2018-09-30' }, prestige: true,
56
+ traits: ['norwegianforest', 'totesbasic', 'PU26']}, ## todo/fix: check totesbasic - three genes!!! - check which one PA15?
57
+ vulcat: { name: 'Vulcat', date: '2018-09-12', limit: 1, exclusive: true, ids: [1000000], desc: '1 000 000th Kitty' },
58
+ meowstro: { name: 'Meowstro', date: '2018-09-09', limit: 1698,
59
+ traits: ['onyx', 'wowza', 'eclipse']},
60
+ atlas: { name: 'Atlas', date: '2018-09-07', limit: 998,
61
+ traits: ['highlander', 'kittencream', 'swarley', 'topoftheworld']},
15
62
 
16
- genesis: { name: 'Genesis', limit: 1, date: '2017-11-24', exclusive: true, ids: [1],
17
- desc: '1st Kitty' },
63
+ ## August
64
+ vulcant: { name: 'Vulcant', date: '2018-08-31', limit: 20, exclusive: true, ids: [932914,937360,938299,946526,948925,949058,950617,952280,952981,956374,956908,958570,964205,967234,983046,984451,990713,992861,995745,997469] },
65
+ purrity: { name: 'Purrity', date: '2018-08-23', limit: 5984,
66
+ traits: ['selkirk', 'chronic', 'cloudwhite', 'cheeky']},
67
+ rabbidkitty: { name: 'Rabbid Kitty', date: '2018-08-23', limit: 6, exclusive: true, ids: (260..265).to_a, desc: 'Ubisoft Blockchain Heroes Hackathon' },
68
+ squiddlesworth: { name: 'Squiddlesworth', date: '2018-08-16', limit: 1510, desc: 'Lava Squid Cat',
69
+ traits: ['sphynx', 'redvelvet', 'patrickstarfish', 'dragontail']},
18
70
 
19
- ducat: { name: 'Du Cat', limit: 10_000, date: '2017-11-29' },
71
+ ## July
72
+ purrspero: { name: 'Purrspero', date: '2018-07-27', limit: 4448,
73
+ traits: ['dippedcone', 'googly', 'royalpurple', 'beard']},
74
+ catbury: { name: 'Catbury', date: '2018-07-25', limit: 76,
75
+ traits: ['ragdoll', 'crazy', 'chocolate', 'mintmacaron', 'yokel', 'WE02']},
76
+ honu: { name: 'Honu', date: '2018-07-20', limit: 1, exclusive: true, ids: [251], desc: 'Kitties for Good - Save Turtle Habitats' },
77
+ victoire: { name: 'Victoire', date: '2018-07-18', limit: 1, exclusive: true, ids: [402], desc: 'France Football World Cup Champion' },
78
+ lulu: { name: 'Lulu', date: '2018-07-13', limit: 999,
79
+ traits: ['cyan', 'verdigris', 'turtleback', 'salty']},
80
+ boot: { name: 'Boot', date: '2018-07-05', limit: 1440, desc: 'Football World Cup',
81
+ traits: ['ganado', 'wiley', 'cerulian', 'rollercoaster'],
82
+ variants: {
83
+ belgium: { name: 'Belgium', limit: 97, traits: [['orangesoda','onyx']]}, ## Base Color: Orangesoda / Onyx
84
+ brazil: { name: 'Brazil', limit: 195, traits: [['hintomint','bananacream','verdigris']]}, ## Base Color: Hintomint / Bananacream / Verdigris
85
+ croatia: { name: 'Croatia', limit: 253, traits: [['cottoncandy','mauveover','oldlace']]}, ## Base Color: Cottoncandy / Mauveover / Oldlace
86
+ england: { name: 'England', limit: 168, traits: [['greymatter','martian']]}, ## Base Color: Greymatter / Martian
87
+ france: { name: 'France', limit: 317, traits: [['harbourfog','cinderella','lavender']]}, ## Base Color: Harbourfog / Cinderella / Lavender
88
+ russia: { name: 'Russia', limit: 94, traits: [['shadowgrey','salmon','cloudwhite']]}, ## Base Color: Shadowgrey / Salmon/ Cloudwhite
89
+ sweden: { name: 'Sweden', limit: 123, traits: [['brownies','dragonfruit','redvelvet']]}, ## Base Color: Brownies / Dragonfruit / Redvelvet
90
+ uruguay: { name: 'Uruguay', limit: 193, traits: [['aquamarine','nachocheez','koala']]}, ## Base Color: Aquamarine / Nachocheez / Koala
91
+ },
92
+ },
93
+ ## note: boot - different variants for world cup teams
94
+ ## Although there are 8 unique Fancies, they're actually each a variant on the same Fancy - Boot.
95
+ ## Their colours are different, and you can collect all 8 as a set
20
96
 
21
- dracula: { name: 'Dracula', limit: 2_000, date: '2017-12-01' },
97
+ ## June
98
+ raspoutine: { name: 'Raspoutine', date: '2018-06-28', limit: 1867,
99
+ traits: ['buzzed', 'nachocheez', 'sandalwood', 'belch']},
100
+ furlin: { name: 'Furlin', date: '2018-06-26', limit: 52, exclusive: true, ids: (115..126).to_a + (128..166).to_a },
101
+ kittypride: { name: 'Kitty Pride', date: '2018-06-21', limit: 1316,
102
+ traits: ['fabulous','cinderella','garnet']},
103
+ furrmingo: { name: 'Furrmingo', date: '2018-06-14', limit: 333,
104
+ traits: ['bobtail', 'egyptiankohl', 'flamingo', 'whixtensions']},
22
105
 
23
- mistletoe: { name: 'Mistletoe', limit: 2_000, date: '2017-12-09',
24
- desc: "XMas Kitty" },
106
+ ## May
107
+ page: { name: 'Page', date: '2018-05-31', limit: 50_000,
108
+ traits: ['rascal', 'peach', 'wasntme' ]},
109
+ "schrödingerscat": { name: "Schrödinger's Cat", date: '2018-05-20', limit: 73,
110
+ traits: ['forgetmenot','tinybox','PU20','SE25']},
111
+ chatplongeur: { name: 'Chat Plongeur', date: '2018-05-19', limit: 1910,
112
+ traits: ['aquamarine', 'skyblue', 'seafoam']},
113
+ docpurr: { name: 'Doc Purr', date: '2018-05-16', limit: 250,
114
+ traits: ['persian','spock','raisedbrow','violet','tongue']},
115
+ celestialcyberdimension: { name: 'Celestial Cyber Dimension', date: '2018-05-12', limit: 1, exclusive: true, ids: [127] },
116
+ swish: { name: 'Swish', date: '2018-05-08', limit: 2880,
117
+ traits: ['norwegianforest', 'luckystripes', 'thicccbrowz', 'orangesoda']},
25
118
 
26
- santaclaws: { name: 'Santa Claws', limit: 1_000, date: '2017-12-12',
27
- desc: 'Ho Ho Ho - Santa Claus Kitty' },
119
+ ## April
120
+ flutterbee: { name: 'Flutterbee', date: '2018-04-28', limit: 275,
121
+ traits: ['cloudwhite','jaguar','lemonade','azaleablush','WE14']},
122
+ vernon: { name: 'Vernon', date: '2018-04-16', limit: 320, desc: 'Spring Equinox Kitty',
123
+ traits: ['amur','fabulous','cottoncandy','springcrocus','belleblue','soserious']}, ## first, see https://www.cryptokitties.co/kitty/696398
28
124
 
29
- phuziqaat: { name: 'Phu Ziqaat', limit: 1_000, date: '2017-12-31',
30
- desc: 'Alien Kitty' },
125
+ ## March
126
+ berry: { name: 'Berry', date: '2018-03-16', limit: 200,
127
+ traits: ['dragonfruit','thunderstruck','emeraldgreen','apricot','simple']},
128
+ pussforprogress: { name: 'Puss For Progress', date: '2018-03-08', limit: 1920, desc: "Women's Day",
129
+ traits: ['himalayan','peach','safetyvest','gerbil']},
130
+ fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', date: '2018-03-08', limit: 888,
131
+ traits: ['harbourfog','calicool','swampgreen','sapphire','beard']}, ## todo: check date for china launch specials!!!
132
+ goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', date: '2018-03-08', limit: 1, exclusive: true, ids: [888], desc: 'China Launch' }, ## todo: check date for china launch specials!!!
133
+ goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', date: '2018-03-08', limit: 11, exclusive: true, ids: [1802,1803,1805,1806,1808,1809,1812,1816]+(1825..1828).to_a, desc: 'China Launch' }, ## todo: check date for china launch specials!!!
134
+ liondance: { name: 'Lion Dance', name_cn: '咚咚锵', date: '2018-03-07', limit: 888, overflow: 1,
135
+ traits: ['manx','royalblue','googly','starstruck']},
136
+ dogcat: { name: 'Dog Cat', name_cn: '汪星爷', date: '2018-03-02', limit: 88, desc: 'Year of the Dog (Greater China)',
137
+ traits: ['tigerpunk','periwinkle','barkbrown','sweetmeloncakes','yokel']},
138
+ knightkitty: { name: 'Knight Kitty', date: '2018-03-01', limit: 11, exclusive: true, ids: (104..114).to_a },
31
139
 
32
- stiches: { name: 'Stiches', limit: 500, date: '2018-01-10',
33
- desc: 'Zombie Kitty' },
140
+ ## February
141
+ tabby: { name: 'Tabby', date: '2018-02-26', limit: 250,
142
+ traits: ['ragamuffin','morningglory','otaku','cheeky']},
143
+ yuricatsuki: { name: 'Yuri Catsuki', date: '2018-02-20', limit: 250, desc: 'Figure Scating Kitty - Winter Olympics (Korea)',
144
+ traits: ['cymric','tiger','neckbeard','elk']},
145
+ misterpurrfect: { name: 'Mister Purrfect', date: '2018-02-14', limit: 1000, desc: "Valentine's Day",
146
+ traits: ['chocolate','baddate','strawberry','wuvme']},
147
+ earnie: { name: 'Earnie', date: '2018-02-13', limit: 500, desc: 'Earn.com - Golden Kitty Award (Product Hunt)',
148
+ traits: ['birman','orangesoda','hotrod','grim']},
149
+ cathena: { name: 'Cathena', date: '2018-02-06', limit: 1, exclusive: true, ids: [500000], desc: '500 000th Kitty' },
34
150
 
151
+ ## January
152
+ 'momo-chan': { name: 'Momo-chan', date: '2018-01-31', limit: 500, desc: 'Ninja Kitty',
153
+ traits: ['onyx','henna','bloodred','wolfgrey','sass']},
154
+ negato: { name: 'Negato', date: '2018-01-29', limit: 500, desc: 'Ninja Kitty',
155
+ traits: ['onyx','henna','wolfgrey','slyboots']},
156
+ stitches: { name: 'Stitches', date: '2018-01-10', limit: 500, desc: 'Zombie Kitty',
157
+ traits: ['hintomint','seafoam','swampgreen','saycheese']},
35
158
 
159
+ ## 2017
160
+ ## December
161
+ phuziqaat: { name: 'Phu Ziqaat', date: '2017-12-31', limit: 1000, desc: 'Alien Kitty',
162
+ traits: ['chartreux','spock','alien','pouty']},
163
+ santaclaws: { name: 'Santa Claws', date: '2017-12-12', limit: 1000, overflow: 2, desc: 'Ho Ho Ho - Santa Claus Kitty',
164
+ traits: ['cloudwhite','scarlet','beard','wild_d']},
165
+ mistletoe: { name: 'Mistletoe', date: '2017-12-09', limit: 2000, desc: "XMas Kitty",
166
+ traits: ['odlace','crazy','gerbil']},
167
+ dracula: { name: 'Dracula', date: '2017-12-01', limit: 2000,
168
+ traits: ['laperm','spock','strawberry','WE01']},
36
169
 
37
- berry: { name: 'Berry', limit: 200 },
38
- cathena: { name: 'Cathena', limit: 1, desc: '500 000th Kitty' },
39
- dogcat: { name: 'Dog Cat', name_cn: '汪星爷', limit: 88, desc: 'Year of the Dog (Greater China)' },
40
- earnie: { name: 'Earnie', limit: 500, desc: 'Earn.com - Golden Kitty Award (Product Hunt)' },
41
- fortunecat: { name: 'Fortune Cat', name_cn: '红包喵', limit: 888 },
42
- goldendogcat: { name: 'Golden Dog Cat', name_cn: '旺财汪', limit: 11 },
43
- goldendragoncat: { name: 'Golden Dragon Cat', name_cn: '帝龙喵', limit: 1, },
44
- knightkitty: { name: 'Knight Kitty', limit: 11 },
45
- liondance: { name: 'Lion Dance', name_cn: '咚咚锵', limit: 888 },
46
- misterpurrfect: { name: 'Mister Purrfect', limit: 1_000, desc: "Valentine's Day" },
47
- 'momo-chan': { name: 'Momo-chan', limit: 500, desc: 'Ninja Kitty' },
48
- negato: { name: 'Negato', limit: 500, desc: 'Ninja Kitty' },
49
- pussforprogress: { name: 'Puss For Progress', limit: 1_920, desc: "Women's Day" },
50
- tabby: { name: 'Tabby', limit: 250 },
51
- yuricatsuki: { name: 'Yuri Catsuki', limit: 250, desc: 'Figure Scating Kitty - Winter Olympics (Korea)' },
52
- vernon: { name: 'Vernon', limit: 320, desc: 'Spring Equinox Kitty' }, ## first, see https://www.cryptokitties.co/kitty/696398
170
+ ## November
171
+ ducat: { name: 'Du Cat', date: '2017-11-29', limit: 10_000,
172
+ traits: ['cymric','tongue']},
173
+ genesis: { name: 'Genesis', date: '2017-11-24', limit: 1, exclusive: true, ids: [1], desc: '1st Kitty'},
174
+ shipcat: { name: 'Ship Cat', date: '2017-11-23', limit: 2000,
175
+ traits: ['sphynx','orangesoda','luckystripe','crazy']},
176
+ bugcat: { name: 'Bug Cat', date: '2017-11-23', limit: 3, exclusive: true, ids: [101,102,103], desc: 'Bug Bounty Kitty' },
53
177
  }
@@ -89,46 +89,4 @@ class Gene
89
89
  gene
90
90
  end
91
91
 
92
-
93
-
94
- #############################
95
- # Tier 1 Tier 2 Tier 3 Tier 4 Tier 5
96
- ## (1-g) (h-p) (q-t) (u,v) (w)
97
-
98
- ### todo/check: move TIER mapping to Genome class or ... - why? why not?
99
- TIER = { ## todo/fix: use an algo to calculate - why? why not?
100
- '1' => 1,
101
- '2' => 1,
102
- '3' => 1,
103
- '4' => 1,
104
- '5' => 1,
105
- '6' => 1,
106
- '7' => 1,
107
- '8' => 1,
108
- '9' => 1,
109
- 'a' => 1,
110
- 'b' => 1,
111
- 'c' => 1,
112
- 'd' => 1,
113
- 'e' => 1,
114
- 'f' => 1,
115
- 'g' => 1,
116
- 'h' => 2,
117
- 'i' => 2,
118
- 'j' => 2,
119
- 'k' => 2,
120
- 'm' => 2,
121
- 'n' => 2,
122
- 'o' => 2,
123
- 'p' => 2,
124
- 'q' => 3,
125
- 'r' => 3,
126
- 's' => 3,
127
- 't' => 3,
128
- 'u' => 4,
129
- 'v' => 4,
130
- 'w' => 5,
131
- 'x' => nil
132
- }
133
-
134
92
  end # class Gene
@@ -3,8 +3,6 @@
3
3
 
4
4
  ## load all *.file in data folder
5
5
 
6
-
7
-
8
6
  def find_datafiles( root='.' )
9
7
  files = []
10
8
  ## todo/check: include all subfolders - why? why not?
@@ -15,99 +13,6 @@ def find_datafiles( root='.' )
15
13
  end
16
14
 
17
15
 
18
- def connect( config={} )
19
- if config.empty?
20
- puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
21
-
22
- ### change default to ./copycats.db ?? why? why not?
23
- db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///kitties.db' )
24
-
25
- if db.scheme == 'postgres'
26
- config = {
27
- adapter: 'postgresql',
28
- host: db.host,
29
- port: db.port,
30
- username: db.user,
31
- password: db.password,
32
- database: db.path[1..-1],
33
- encoding: 'utf8'
34
- }
35
- else # assume sqlite3
36
- config = {
37
- adapter: db.scheme, # sqlite3
38
- database: db.path[1..-1] # world.db (NB: cut off leading /, thus 1..-1)
39
- }
40
- end
41
- end
42
-
43
-
44
- puts "Connecting to db using settings: "
45
- pp config
46
- ActiveRecord::Base.establish_connection( config )
47
- ActiveRecord::Base.logger = Logger.new( STDOUT )
48
- ## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
49
-
50
- ## if sqlite3 add (use) some pragmas for speedups
51
- if config[:adapter] == 'sqlite3'
52
- ## check/todo: if in memory e.g. ':memory:' no pragma needed!!
53
- con = ActiveRecord::Base.connection
54
- con.execute( 'PRAGMA synchronous=OFF;' )
55
- con.execute( 'PRAGMA journal_mode=OFF;' )
56
- con.execute( 'PRAGMA temp_store=MEMORY;' )
57
- end
58
- end ## method connect
59
-
60
-
61
- def setup_db
62
- ## build schema
63
- CreateDb.new.up
64
- end
65
-
66
-
67
-
68
- ### todo/fix:
69
- ## make trait_ids_cache more (re)usable - fix global!!!!
70
- TRAIT_IDS_CACHE = {}
71
-
72
-
73
- def setup_traits
74
- ## for speed - turn off logging for info/debug/etc. levels
75
- ActiveRecord::Base.logger.level = :warn
76
-
77
- ### add traits
78
- TRAITS.each do |trait_key, trait_hash|
79
-
80
- trait_t = Copycats::Model::TraitType.new
81
- trait_t.name = trait_hash[:name]
82
- trait_t.key = trait_key.to_s
83
- trait_t.save!
84
-
85
- cache = {}
86
-
87
- Kai::ALPHABET.each_char.with_index do |kai,n|
88
- name = trait_hash[:kai][kai]
89
- name = '?' if name.nil? || name.empty?
90
-
91
- tier = Gene::TIER[kai]
92
-
93
- puts "Kai: #{kai} (#{n}) /#{tier}, Cattribute: #{name}"
94
- trait = Copycats::Model::Trait.new
95
- trait.name = name
96
- trait.kai = kai
97
- trait.n = n
98
- trait.tier = tier
99
- trait.trait_type_id = trait_t.id
100
- trait.save!
101
-
102
- cache[ kai ] = trait.id
103
- end
104
-
105
- TRAIT_IDS_CACHE[ trait_key ] = { id: trait_t.id,
106
- kai: cache }
107
- end
108
- end
109
-
110
-
111
16
  def read_datafiles( data_dir: './data' )
112
17
  files = find_datafiles( data_dir )
113
18
  pp files
@@ -0,0 +1,94 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ def connect( config={} )
5
+ if config.empty?
6
+ puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
7
+
8
+ ### change default to ./copycats.db ?? why? why not?
9
+ db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///kitties.db' )
10
+
11
+ if db.scheme == 'postgres'
12
+ config = {
13
+ adapter: 'postgresql',
14
+ host: db.host,
15
+ port: db.port,
16
+ username: db.user,
17
+ password: db.password,
18
+ database: db.path[1..-1],
19
+ encoding: 'utf8'
20
+ }
21
+ else # assume sqlite3
22
+ config = {
23
+ adapter: db.scheme, # sqlite3
24
+ database: db.path[1..-1] # world.db (NB: cut off leading /, thus 1..-1)
25
+ }
26
+ end
27
+ end
28
+
29
+
30
+ puts "Connecting to db using settings: "
31
+ pp config
32
+ ActiveRecord::Base.establish_connection( config )
33
+ ActiveRecord::Base.logger = Logger.new( STDOUT )
34
+ ## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
35
+
36
+ ## if sqlite3 add (use) some pragmas for speedups
37
+ if config[:adapter] == 'sqlite3'
38
+ ## check/todo: if in memory e.g. ':memory:' no pragma needed!!
39
+ con = ActiveRecord::Base.connection
40
+ con.execute( 'PRAGMA synchronous=OFF;' )
41
+ con.execute( 'PRAGMA journal_mode=OFF;' )
42
+ con.execute( 'PRAGMA temp_store=MEMORY;' )
43
+ end
44
+ end ## method connect
45
+
46
+
47
+ def setup_db
48
+ ## build schema
49
+ CreateDb.new.up
50
+ end
51
+
52
+
53
+
54
+ ### todo/fix:
55
+ ## make trait_ids_cache more (re)usable - fix global!!!!
56
+ TRAIT_IDS_CACHE = {}
57
+
58
+
59
+ def setup_traits
60
+ ## for speed - turn off logging for info/debug/etc. levels
61
+ ActiveRecord::Base.logger.level = :warn
62
+
63
+ ### add traits
64
+ TRAITS.each do |trait_key, trait_hash|
65
+
66
+ trait_t = Copycats::Model::TraitType.new
67
+ trait_t.name = trait_hash[:name]
68
+ trait_t.key = trait_key.to_s
69
+ trait_t.save!
70
+
71
+ cache = {}
72
+
73
+ Kai::ALPHABET.each_with_index do |kai,n|
74
+ name = trait_hash[:kai][kai]
75
+ name = '?' if name.nil? || name.empty?
76
+
77
+ tier = Gene::TIER[kai]
78
+
79
+ puts "Kai: #{kai} (#{n}) /#{tier}, Cattribute: #{name}"
80
+ trait = Copycats::Model::Trait.new
81
+ trait.name = name
82
+ trait.kai = kai
83
+ trait.n = n
84
+ trait.tier = tier
85
+ trait.trait_type_id = trait_t.id
86
+ trait.save!
87
+
88
+ cache[ kai ] = trait.id
89
+ end
90
+
91
+ TRAIT_IDS_CACHE[ trait_key ] = { id: trait_t.id,
92
+ kai: cache }
93
+ end
94
+ end
@@ -23,15 +23,16 @@ def build
23
23
  items = []
24
24
  Kai::ALPHABET.each_char do |kai|
25
25
  value = trait[:kai][kai]
26
+ code = "#{trait[:code]}%02d" % Kai::NUMBER[kai] ## e.g. FU00, FU01, FU02, etc.
26
27
  value = '?' if value.nil? || value.empty?
27
- items << [kai, value]
28
+ items << [kai, code, value]
28
29
  end
29
30
 
30
31
  items.each do |item|
31
- puts "#{item[0]} #{item[1]}"
32
+ puts "#{item[0]} #{item[1]} #{item[2]}"
32
33
  end
33
34
 
34
- buf << "## #{trait[:name]} (Genes #{trait[:genes]})\n\n"
35
+ buf << "## #{trait[:name]} (#{trait[:code]}) - Genes #{trait[:genes]}\n\n"
35
36
  buf << make_table( items )
36
37
  buf << "\n\n"
37
38
  end
@@ -41,17 +42,39 @@ def build
41
42
  buf
42
43
  end ## method build
43
44
 
45
+
46
+ ##
47
+ ## todo/fix: use "shared" link helpers!!!!!
48
+ def kitties_search( q )
49
+ "https://www.cryptokitties.co/search?include=sale,sire,other&search=#{q}"
50
+ end
51
+
52
+
44
53
  def make_table( items )
45
- rows = make_rows( items, columns: 4 )
54
+ rows = make_rows( items, columns: 2 ) ## was 4
46
55
  pp rows
47
56
 
48
57
  buf = ""
49
- buf << "|Kai|Cattribute |Kai|Cattribute |Kai|Cattribute |Kai|Cattribute |\n"
50
- buf << "|---|-------------|---|------------|---|------------|---|------------|\n"
58
+ buf << "|Kai|Code|Cattribute |Kai|Code|Cattribute |\n"
59
+ buf << "|--:|---:|-------------|--:|---:|------------|\n"
51
60
 
52
61
  rows.each do |row|
53
62
  buf << "| "
54
- buf << row.map {|item| "#{item[0]} | #{item[1]}" }.join( " | " )
63
+
64
+ parts = row.map do |item|
65
+ kai = item[0]
66
+ name = item[2]
67
+
68
+ if name == '?'
69
+ cattribute = "?"
70
+ else
71
+ cattribute = "**[#{name}](#{kitties_search(name)})** #{MEWTATION_LEVEL[kai]}"
72
+ end
73
+
74
+ "#{item[0]} | #{item[1]} | #{cattribute}"
75
+ end
76
+
77
+ buf << parts.join( " | " )
55
78
  buf << " |\n"
56
79
  end
57
80
 
@@ -60,7 +83,7 @@ end
60
83
 
61
84
 
62
85
  ## helpers
63
- def make_rows( items, columns: 4 )
86
+ def make_rows( items, columns: 2 )
64
87
  offset = items.size / columns
65
88
  pp offset
66
89
 
@@ -74,7 +97,7 @@ end
74
97
 
75
98
 
76
99
  def save( path )
77
- File.open( path, "w" ) do |f|
100
+ File.open( path, "w:utf-8" ) do |f|
78
101
  f.write build
79
102
  end
80
103
  end
@@ -17,7 +17,7 @@ TRAITS =
17
17
  {
18
18
  body: {
19
19
  genes: '0-3',
20
- name: 'Fur',
20
+ name: 'Fur', code: 'FU',
21
21
  kai: {
22
22
  '1' => 'savannah',
23
23
  '2' => 'selkirk',
@@ -55,14 +55,14 @@ TRAITS =
55
55
  },
56
56
  pattern: {
57
57
  genes: '4-7',
58
- name: 'Pattern',
58
+ name: 'Pattern', code: 'PA',
59
59
  kai: {
60
60
  '1' => 'vigilante',
61
61
  '2' => 'tiger',
62
62
  '3' => 'rascal',
63
63
  '4' => 'ganado',
64
64
  '5' => 'leopard',
65
- '6' => 'camo ',
65
+ '6' => 'camo',
66
66
  '7' => 'rorschach',
67
67
  '8' => 'spangled',
68
68
  '9' => 'calicool',
@@ -93,7 +93,7 @@ TRAITS =
93
93
  },
94
94
  coloreyes: {
95
95
  genes: '8-11',
96
- name: 'Eye Color',
96
+ name: 'Eye Color', code: 'EC',
97
97
  kai: {
98
98
  '1' => 'thundergrey',
99
99
  '2' => 'gold',
@@ -131,7 +131,7 @@ TRAITS =
131
131
  },
132
132
  eyes: {
133
133
  genes: '12-15',
134
- name: 'Eye Shape', ## eye type
134
+ name: 'Eye Shape', code: 'ES', ## eye type
135
135
  kai: {
136
136
  '1' => 'swarley',
137
137
  '2' => 'wonky',
@@ -169,7 +169,7 @@ TRAITS =
169
169
  },
170
170
  color1: {
171
171
  genes: '16-19',
172
- name: 'Base Color', ## colorprimary / body color
172
+ name: 'Base Color', code: 'BC', ## colorprimary / body color
173
173
  kai: {
174
174
  '1' => 'shadowgrey',
175
175
  '2' => 'salmon',
@@ -207,7 +207,7 @@ TRAITS =
207
207
  },
208
208
  color2: {
209
209
  genes: '20-23',
210
- name: 'Highlight Color', ## colorsecondary / sec color / pattern color
210
+ name: 'Highlight Color', code: 'HC', ## colorsecondary / sec color / pattern color
211
211
  kai: {
212
212
  '1' => 'cyborg',
213
213
  '2' => 'springcrocus',
@@ -245,7 +245,7 @@ TRAITS =
245
245
  },
246
246
  color3: {
247
247
  genes: '24-27',
248
- name: 'Accent Color', ## colortertiary
248
+ name: 'Accent Color', code: 'AC', ## colortertiary
249
249
  kai: {
250
250
  '1' => 'belleblue',
251
251
  '2' => 'sandalwood',
@@ -283,7 +283,7 @@ TRAITS =
283
283
  },
284
284
  wild: {
285
285
  genes: '28-31',
286
- name: 'Wild',
286
+ name: 'Wild', code: 'WE',
287
287
  kai: {
288
288
  'h' => 'littlefoot',
289
289
  'i' => 'elk',
@@ -292,6 +292,7 @@ TRAITS =
292
292
  'm' => 'daemonwings',
293
293
  'n' => 'featherbrain',
294
294
  'o' => 'flapflap',
295
+ 'p' => 'daemonhorns',
295
296
  'q' => 'dragontail',
296
297
  'r' => 'aflutter',
297
298
  's' => 'foghornpawhorn',
@@ -304,7 +305,7 @@ TRAITS =
304
305
  },
305
306
  mouth: {
306
307
  genes: '32-35',
307
- name: 'Mouth',
308
+ name: 'Mouth', code: 'MO',
308
309
  kai: {
309
310
  '1' => 'whixtensions',
310
311
  '2' => 'wasntme',
@@ -340,9 +341,9 @@ TRAITS =
340
341
  'x' => ''
341
342
  }
342
343
  },
343
- future1: { ## todo/fix: change to environment
344
+ environment: {
344
345
  genes: '36-39',
345
- name: 'Environment',
346
+ name: 'Environment', code: 'EN',
346
347
  kai: {
347
348
  'h' => 'salty',
348
349
  'i' => 'dune',
@@ -360,16 +361,170 @@ TRAITS =
360
361
  'v' => 'prism',
361
362
  'w' => 'junglebook',
362
363
  'x' => ''
363
- } ## use alpha_1, alpha_2, ... - why? why not?
364
+ }
364
365
  },
365
- future2: {
366
+ secret: {
366
367
  genes: '40-43',
367
- name: 'Y Gene', ## todo: change to Y Gene or Y (see https://guide.cryptokitties.co/guide/cat-features/genes)
368
- kai: { } ## use beta_1, beta_2, ... - why? why not?
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
+ ## use alpha_1, alpha_2, ... - why? why not?
371
+ ## use beta_1, beta_2, ... - why? why not?
372
+ ## use gamma_1, gamma_2, ... - why? why not?
369
373
  },
370
- future3: { ## todo/fix: change to purrstige
374
+ prestige: {
371
375
  genes: '44-47',
372
- name: 'Purrstige',
373
- kai: { } ## use gamma_1, gamma_2, ... - why? why not?
376
+ name: 'Purrstige', code: 'PU',
377
+ kai: { }
378
+ ## prune, furball, duckduckcat, or thatsawrap - more like fancies (not really traits)
374
379
  }
375
380
  }
381
+
382
+
383
+ ### build "reverse" lookup tables
384
+
385
+ TRAITS_BY_NAME = {} # e.g. savannah, selkirk, chantilly, ...
386
+ TRAITS_BY_CODE = {} # e.g. FU00, FU01, FU02, ...
387
+
388
+ TRAITS.each do |key,h|
389
+ h[:kai].each do |kai, name|
390
+
391
+ num = Kai::NUMBER[kai]
392
+ code = "#{h[:code]}#{'%02d' % num}" ## e.g. FU00, FU01, etc.
393
+
394
+ rec = {}
395
+ rec[:name] = name
396
+ rec[:kai] = kai
397
+ rec[:code] = code
398
+ rec[:type] = key ## todo - use trait instead of type (use string not symbol?) - why? why not?
399
+
400
+ if TRAITS_BY_NAME[name]
401
+ puts "warn: duplicate trait name!! overwritting old #{name}:"
402
+ pp TRAITS_BY_NAME[name]
403
+ ## add count - why? why not?
404
+ ## note: totebasic used three (3) times!!!
405
+ ## how to make name "unique" ? - add kai e.g. totebase_g etc. - why? why not?
406
+ end
407
+
408
+
409
+ TRAITS_BY_NAME[name] = rec unless name.empty? || name == '?'
410
+ TRAITS_BY_CODE[code] = rec
411
+ end
412
+ end
413
+
414
+
415
+ ### todo/check: move TIER mapping to Genome class or ... - why? why not?
416
+
417
+ ##################################
418
+ # Tier 0 (Base) (1-g)
419
+ # Tier 1 (Mewtation I) (h-p)
420
+ # Tier 2 (Mewtation II) (q-t)
421
+ # Tier 3 (Mewtation III) (u,v)
422
+ # Tier 4 (Mewtation IIII) (w)
423
+ #
424
+ TIER = { ## todo/fix: use an algo to calculate - why? why not?
425
+ '1' => 0,
426
+ '2' => 0,
427
+ '3' => 0,
428
+ '4' => 0,
429
+ '5' => 0,
430
+ '6' => 0,
431
+ '7' => 0,
432
+ '8' => 0,
433
+ '9' => 0,
434
+ 'a' => 0,
435
+ 'b' => 0,
436
+ 'c' => 0,
437
+ 'd' => 0,
438
+ 'e' => 0,
439
+ 'f' => 0,
440
+ 'g' => 0,
441
+ 'h' => 1,
442
+ 'i' => 1,
443
+ 'j' => 1,
444
+ 'k' => 1,
445
+ 'm' => 1,
446
+ 'n' => 1,
447
+ 'o' => 1,
448
+ 'p' => 1,
449
+ 'q' => 2,
450
+ 'r' => 2,
451
+ 's' => 2,
452
+ 't' => 2,
453
+ 'u' => 3,
454
+ 'v' => 3,
455
+ 'w' => 4,
456
+ 'x' => nil
457
+ }
458
+
459
+ ## (quick 'n' dirty) kai to mutation/mewtation level (I,II,III,IIII)
460
+ MUTATION_LEVEL = {
461
+ '1' => '',
462
+ '2' => '',
463
+ '3' => '',
464
+ '4' => '',
465
+ '5' => '',
466
+ '6' => '',
467
+ '7' => '',
468
+ '8' => '',
469
+ '9' => '',
470
+ 'a' => '',
471
+ 'b' => '',
472
+ 'c' => '',
473
+ 'd' => '',
474
+ 'e' => '',
475
+ 'f' => '',
476
+ 'g' => '',
477
+ 'h' => 'I',
478
+ 'i' => 'I',
479
+ 'j' => 'I',
480
+ 'k' => 'I',
481
+ 'm' => 'I',
482
+ 'n' => 'I',
483
+ 'o' => 'I',
484
+ 'p' => 'I',
485
+ 'q' => 'II',
486
+ 'r' => 'II',
487
+ 's' => 'II',
488
+ 't' => 'II',
489
+ 'u' => 'III',
490
+ 'v' => 'III',
491
+ 'w' => 'IIII',
492
+ 'x' => ''
493
+ }
494
+ MEWTATION_LEVEL = MUTATION_LEVEL ## add alias
495
+
496
+ MUTATION_PAIR = {
497
+ '1' => '', ## todo: use nil for "" - why? why not?
498
+ '2' => '',
499
+ '3' => '',
500
+ '4' => '',
501
+ '5' => '',
502
+ '6' => '',
503
+ '7' => '',
504
+ '8' => '',
505
+ '9' => '',
506
+ 'a' => '',
507
+ 'b' => '',
508
+ 'c' => '',
509
+ 'd' => '',
510
+ 'e' => '',
511
+ 'f' => '',
512
+ 'g' => '',
513
+ 'h' => '1+2',
514
+ 'i' => '3+4',
515
+ 'j' => '5+6',
516
+ 'k' => '7+8',
517
+ 'm' => '9+a',
518
+ 'n' => 'b+c',
519
+ 'o' => 'd+e',
520
+ 'p' => 'f+g',
521
+ 'q' => 'h+i',
522
+ 'r' => 'j+k',
523
+ 's' => 'm+n',
524
+ 't' => 'o+p',
525
+ 'u' => 'q+r',
526
+ 'v' => 's+t',
527
+ 'w' => 'u+v',
528
+ 'x' => ''
529
+ }
530
+ MEWTATION_PAIR = MUTATION_PAIR ## add alias
@@ -0,0 +1,294 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ TRAITS_TIMELINE =
5
+ {
6
+ ## 2018
7
+ ## november
8
+ dune: { date: '2018-11-21' },
9
+ secretgarden: { date: '2018-11-21' },
10
+ floorislava: { date: '2018-11-21' },
11
+ junglebook: { date: '2018-11-21' },
12
+
13
+ meowgarine: { date: '2018-11-16' },
14
+ cornflower: { date: '2018-11-16' },
15
+ icicle: { date: '2018-11-16' },
16
+ hotcocoa: { date: '2018-11-16' },
17
+ firstblush: { date: '2018-11-16' },
18
+
19
+ featherbrain: { date: '2018-11-13' },
20
+ foghornpawhorn: { date: '2018-11-13' },
21
+ alicorn: { date: '2018-11-13' },
22
+ wyrm: { date: '2018-11-13' },
23
+
24
+ mittens: { date: '2018-11-06' },
25
+ arcreactor: { date: '2018-11-06' },
26
+ allyouneed: { date: '2018-11-06' },
27
+ gyre: { date: '2018-11-06' },
28
+ moonrise: { date: '2018-11-06' },
29
+
30
+ ## october
31
+ metime: { date: '2018-10-26' },
32
+ jacked: { date: '2018-10-26' },
33
+ prism: { date: '2018-10-26' },
34
+
35
+ isotope: { date: '2018-10-23' },
36
+ bridesmaid: { date: '2018-10-23' },
37
+ downbythebay: { date: '2018-10-23' },
38
+ gemini: { date: '2018-10-23' },
39
+ kaleidoscope: { date: '2018-10-23' },
40
+
41
+ ## thatsawrap: { date: '2018-10-21' }, ## todo: move prestige to fancies!!!
42
+ ## duckduckcat: { date: '2018-10-19' }, ## todo: move prestige to fancies!!!
43
+
44
+ siberian: { date: '2018-10-17' },
45
+ lynx: { date: '2018-10-17' },
46
+ toyger: { date: '2018-10-17' },
47
+ burmilla: { date: '2018-10-17' },
48
+ liger: { date: '2018-10-17' },
49
+
50
+ moue: { date: '2018-10-10' },
51
+ majestic: { date: '2018-10-10' },
52
+ satiated: { date: '2018-10-10' },
53
+ struck: { date: '2018-10-10' },
54
+ delite: { date: '2018-10-10' },
55
+
56
+ myparade: { date: '2018-10-03' },
57
+ roadtogold: { date: '2018-10-03' },
58
+
59
+
60
+ ## september
61
+ dreamboat: { date: '2018-09-21' },
62
+ fallspice: { date: '2018-09-21' },
63
+ mallowflower: { date: '2018-09-21' },
64
+ hanauma: { date: '2018-09-21' },
65
+ summerbonnet: { date: '2018-09-21' },
66
+
67
+ ## prune: { date: '2018-09-19' }, ## todo: move prestige to fancies!!!
68
+ ## furball: { date: '2018-09-19' }, ## todo: move prestige to fancies!!!
69
+
70
+ firedup: { date: '2018-09-06' },
71
+ hacker: { date: '2018-09-06' },
72
+ drama: { date: '2018-09-06' },
73
+ candyshoppe: { date: '2018-09-06' },
74
+
75
+ asif: { date: '2018-09-05' },
76
+
77
+ ## august
78
+ dragonwings: { date: '2018-08-29' },
79
+ aflutter: { date: '2018-08-29' },
80
+ ducky: { date: '2018-08-29' },
81
+
82
+ chantilly: { date: '2018-08-23' },
83
+ mekong: { date: '2018-08-23' },
84
+ fox: { date: '2018-08-23' },
85
+ lykoi: { date: '2018-08-23' },
86
+
87
+ tundra: { date: '2018-08-17' },
88
+ glacier: { date: '2018-08-17' },
89
+ hyacinth: { date: '2018-08-17' },
90
+ shamrock: { date: '2018-08-17' },
91
+
92
+ inflatablepool: { date: '2018-08-08' },
93
+ peppermint: { date: '2018-08-08' },
94
+ ooze: { date: '2018-08-08' },
95
+ cyborg: { date: '2018-08-08' },
96
+
97
+ scorpius: { date: '2018-08-01' },
98
+ splat: { date: '2018-08-01' },
99
+ vigilante: { date: '2018-08-01' },
100
+ avatar: { date: '2018-08-01' },
101
+
102
+ ## july
103
+ topoftheworld: { date: '2018-07-25' },
104
+ confuzzled: { date: '2018-07-25' },
105
+ samwise: { date: '2018-07-25' },
106
+ walrus: { date: '2018-07-25' },
107
+
108
+ olive: { date: '2018-07-20' },
109
+ pinefresh: { date: '2018-07-20' },
110
+ oasis: { date: '2018-07-20' },
111
+ dioscuri: { date: '2018-07-20' },
112
+
113
+ juju: { date: '2018-07-18' },
114
+ frozen: { date: '2018-07-18' },
115
+
116
+ kalahari: { date: '2018-07-13' },
117
+ atlantis: { date: '2018-07-13' },
118
+
119
+ fangtastic: { date: '2018-07-06' },
120
+
121
+ ## june
122
+ littlefoot: { date: '2018-06-29' },
123
+ dragontail: { date: '2018-06-29' },
124
+
125
+ padparadscha: { date: '2018-06-28' },
126
+ rosequartz: { date: '2018-06-28' },
127
+ universe: { date: '2018-06-28' },
128
+
129
+ martian: { date: '2018-06-22' },
130
+ redvelvet: { date: '2018-06-22' },
131
+ brownies: { date: '2018-06-22' },
132
+
133
+ wowza: { date: '2018-06-19' },
134
+ tendertears: { date: '2018-06-19' },
135
+
136
+ impish: { date: '2018-06-14' },
137
+
138
+ finalfrontier: { date: '2018-06-11' },
139
+
140
+ cobalt: { date: '2018-06-09' },
141
+ cashewmilk: { date: '2018-06-09' },
142
+ buttercup: { date: '2018-06-09' },
143
+
144
+ manul: { date: '2018-06-05' },
145
+ balinese: { date: '2018-06-05' },
146
+ kurilian: { date: '2018-06-05' },
147
+
148
+ ## may
149
+ unicorn: { date: '2018-05-31' },
150
+ flapflap: { date: '2018-05-31' },
151
+
152
+ dahlia: { date: '2018-05-29' },
153
+ palejade: { date: '2018-05-29' },
154
+ autumnmoon: { date: '2018-05-29' },
155
+
156
+ razzledazzle: { date: '2018-05-24' },
157
+ highsociety: { date: '2018-05-24' },
158
+ rorschach: { date: '2018-05-24' },
159
+
160
+ tinybox: { date: '2018-05-19' },
161
+
162
+ butterscotch: { date: '2018-05-10' },
163
+ garnet: { date: '2018-05-10' },
164
+ mertail: { date: '2018-05-10' },
165
+ pearl: { date: '2018-05-10' },
166
+
167
+ highlander: { date: '2018-05-08' },
168
+ koladiviya: { date: '2018-05-08' },
169
+
170
+ swarley: { date: '2018-05-04' },
171
+ oceanid: { date: '2018-05-04' },
172
+ chameleon: { date: '2018-05-04' },
173
+ bornwithit: { date: '2018-05-04' },
174
+
175
+ ## april
176
+ cinderella: { date: '2018-04-27' },
177
+ lavender: { date: '2018-04-27' },
178
+
179
+ daemonhorns: { date: '2018-04-24' },
180
+ salty: { date: '2018-04-24' },
181
+
182
+ shale: { date: '2018-04-19' },
183
+
184
+ eclipse: { date: '2018-04-17' },
185
+ parakeet: { date: '2018-04-17' },
186
+
187
+ daemonwings: { date: '2018-04-13' },
188
+
189
+ caffeine: { date: '2018-04-10' },
190
+
191
+ frosting: { date: '2018-04-02' },
192
+ patrickstarfish: { date: '2018-04-02' },
193
+ mintmacaron: { date: '2018-04-02' },
194
+
195
+
196
+ ## march
197
+ doridnudibranch: { date: '2018-03-30' },
198
+
199
+ springcrocus: { date: '2018-03-20' },
200
+
201
+ thunderstruck: { date: '2018-03-16' },
202
+ rascal: { date: '2018-03-16' },
203
+
204
+ dragonfruit: { date: '2018-03-14' },
205
+
206
+ belch: { date: '2018-03-09' },
207
+
208
+ pixiebob: { date: '2018-03-08' },
209
+ poisonberry: { date: '2018-03-08' },
210
+ safetyvest: { date: '2018-03-08' },
211
+
212
+ cyan: { date: '2018-03-05' },
213
+
214
+
215
+ ## february
216
+ missmuffett: { date: '2018-02-28' },
217
+ wiley: { date: '2018-02-28' },
218
+
219
+ dippedcone: { date: '2018-02-23' },
220
+ leopard: { date: '2018-02-23' },
221
+
222
+ harbourfog: { date: '2018-02-20' },
223
+
224
+ baddate: { date: '2018-02-13' },
225
+
226
+ wuvme: { date: '2018-02-12' },
227
+ yokel: { date: '2018-02-12' },
228
+ starstruck: { date: '2018-02-12' },
229
+
230
+ egyptiankohl: { date: '2018-02-09' },
231
+ bobtail: { date: '2018-02-09' },
232
+
233
+ tiger: { date: '2018-02-06' },
234
+
235
+ birman: { date: '2018-02-02' },
236
+ coralsunrise: { date: '2018-02-02' },
237
+
238
+ ## january
239
+ forgetmenot: { date: '2018-01-30' },
240
+ savannah: { date: '2018-01-30' },
241
+ norwegianforest: { date: '2018-01-30' },
242
+ twilightsparkle: { date: '2018-01-30' },
243
+
244
+ trioculus: { date: '2018-01-26' },
245
+
246
+ morningglory: { date: '2018-01-20' },
247
+ apricot: { date: '2018-01-20' },
248
+ turtleback: { date: '2018-01-20' },
249
+ wasntme: { date: '2018-01-20' },
250
+ cheeky: { date: '2018-01-20' },
251
+
252
+ sapphire: { date: '2018-01-17' },
253
+
254
+ nachocheez: { date: '2018-01-14' },
255
+ koala: { date: '2018-01-14' },
256
+ chronic: { date: '2018-01-14' },
257
+ onyx: { date: '2018-01-14' },
258
+ sass: { date: '2018-01-14' },
259
+
260
+ slyboots: { date: '2018-01-13' },
261
+
262
+ azaleablush: { date: '2018-01-10' },
263
+ spangled: { date: '2018-01-10' },
264
+
265
+ lilac: { date: '2018-01-09' },
266
+ bananacream: { date: '2018-01-09' },
267
+ verdigris: { date: '2018-01-09' },
268
+
269
+ neckbeard: { date: '2018-01-06' },
270
+ grim: { date: '2018-01-06' },
271
+ grimace: { date: '2018-01-06' },
272
+ stunned: { date: '2018-01-06' },
273
+
274
+ wonky: { date: '2018-01-04' },
275
+ babypuke: { date: '2018-01-04' },
276
+ pumpkin: { date: '2018-01-04' },
277
+
278
+ thundergrey: { date: '2018-01-03' },
279
+
280
+
281
+ ## 2017
282
+ ## december
283
+ selkirk: { date: '2017-12-31' },
284
+ icy: { date: '2017-12-31' },
285
+ flamingo: { date: '2017-12-31' },
286
+ seafoam: { date: '2017-12-31' },
287
+
288
+ elk: { date: '2017-12-28' },
289
+
290
+ hintomint: { date: '2017-12-22' },
291
+
292
+ serpent: { date: '2017-12-20' },
293
+ alien: { date: '2017-12-20' },
294
+ }
@@ -5,7 +5,7 @@ module Copycats
5
5
 
6
6
  MAJOR = 0
7
7
  MINOR = 8
8
- PATCH = 0
8
+ PATCH = 1
9
9
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
10
 
11
11
  def self.version
metadata CHANGED
@@ -1,45 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: copycats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-01 00:00:00.000000000 Z
11
+ date: 2018-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: base32-kai
14
+ name: base32-alphabets
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: activerecord
28
+ name: csvreader
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.2.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 1.2.3
41
41
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
42
+ name: activerecord
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: csvreader
56
+ name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -103,22 +103,23 @@ executables:
103
103
  - kitty
104
104
  extensions: []
105
105
  extra_rdoc_files:
106
- - HISTORY.md
106
+ - CHANGELOG.md
107
107
  - LICENSE.md
108
108
  - Manifest.txt
109
109
  - README.md
110
110
  files:
111
- - HISTORY.md
111
+ - CHANGELOG.md
112
112
  - LICENSE.md
113
113
  - Manifest.txt
114
114
  - README.md
115
115
  - Rakefile
116
116
  - bin/kitty
117
117
  - lib/copycats.rb
118
- - lib/copycats/data.rb
119
118
  - lib/copycats/fancies.rb
120
119
  - lib/copycats/gene.rb
121
120
  - lib/copycats/genome.rb
121
+ - lib/copycats/import/read.rb
122
+ - lib/copycats/import/setup.rb
122
123
  - lib/copycats/models/kitty.rb
123
124
  - lib/copycats/reports/genes.rb
124
125
  - lib/copycats/reports/kitty.rb
@@ -127,6 +128,7 @@ files:
127
128
  - lib/copycats/schema.rb
128
129
  - lib/copycats/tool.rb
129
130
  - lib/copycats/traits.rb
131
+ - lib/copycats/traits_timeline.rb
130
132
  - lib/copycats/version.rb
131
133
  - test/helper.rb
132
134
  - test/test_genome.rb