kittyverse 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Manifest.txt +2 -3
- data/README.md +28 -24
- data/Rakefile +1 -1
- data/lib/kittyverse.rb +5 -9
- data/lib/kittyverse/cattributes.rb +1 -1
- data/lib/kittyverse/config/exclusives.rb +197 -0
- data/lib/kittyverse/config/fancies.rb +310 -178
- data/lib/kittyverse/config/purrstiges.rb +178 -11
- data/lib/kittyverse/config/special_editions.rb +135 -0
- data/lib/kittyverse/fancies.rb +4 -1
- data/lib/kittyverse/version.rb +4 -7
- data/test/test_cattributes.rb +0 -2
- data/test/test_fancies.rb +0 -2
- data/test/test_genome.rb +3 -0
- data/test/test_traits.rb +0 -2
- metadata +10 -13
- data/LICENSE.md +0 -116
- data/lib/kittyverse/api/client.rb +0 -147
- data/lib/kittyverse/api/versions.rb +0 -91
@@ -1,45 +1,186 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
###########################################
|
4
2
|
## Purrstige Traits / Cattributes
|
5
3
|
|
4
|
+
|
5
|
+
## trait recipe helpers / shortcuts
|
6
|
+
EN00_EN15 = ['EN00','EN01','EN02','EN03',
|
7
|
+
'EN04','EN05','EN06','EN07',
|
8
|
+
'EN08','EN09','EN10','EN11',
|
9
|
+
'EN12','EN13','EN14','EN15'] # Any non-visible Env (EN00-EN15)
|
10
|
+
|
11
|
+
PU16_PU29 = ['PU16','PU17','PU18','PU19',
|
12
|
+
'PU20','PU21','PU22','PU23',
|
13
|
+
'PU24','PU25','PU26','PU27',
|
14
|
+
'PU28','PU29' ]
|
15
|
+
PU24_PU27 = ['PU24','PU25','PU26','PU27']
|
16
|
+
PU24_PU30 = ['PU24','PU25','PU26','PU27',
|
17
|
+
'PU28','PU29','PU30']
|
18
|
+
PU28_PU29 = ['PU28','PU29']
|
19
|
+
PU28_PU30 = ['PU28','PU29','PU30']
|
20
|
+
|
21
|
+
|
22
|
+
WE00_WE07 = ['WE00', 'WE01', 'WE02', 'WE03',
|
23
|
+
'WE04', 'WE05', 'WE06', 'WE07']
|
24
|
+
WE00_WE15 = ['WE00', 'WE01', 'WE02', 'WE03',
|
25
|
+
'WE04', 'WE05', 'WE06', 'WE07',
|
26
|
+
'WE08', 'WE09', 'WE10', 'WE11',
|
27
|
+
'WE12', 'WE13', 'WE14', 'WE15']
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
PURRSTIGES_HACKATAO = {
|
32
|
+
# This weekend a set of Hackatao Purrstige traits are making
|
33
|
+
# their way into CryptoKitties.
|
34
|
+
# The "HaCKittieZ" will be breedable for a limited time from October 24th - 31st.
|
35
|
+
#
|
36
|
+
# Hackatao are decentralized artists widely known for
|
37
|
+
# their beautiful illustrations and collected among cool cats in the community.
|
38
|
+
#
|
39
|
+
# HaCKittieZ is our collaboration with renowned artist Hackatao and Async Art
|
40
|
+
# to give you incredible ways to personalize your CryptoKitties
|
41
|
+
# and push the boundaries of programmable art.
|
42
|
+
# A set of Purrstige traits designed by Hackatao will be breedable for a limited time.
|
43
|
+
# The HaCKittieZ traits can be mixed and matched to personalize
|
44
|
+
# your Kitties and create exciting permutations!
|
45
|
+
|
46
|
+
# 24.10.20 - New Purrstige - Meowfoolest
|
47
|
+
meowfoolest: { name: 'Meowfoolest',
|
48
|
+
recipe: {
|
49
|
+
time: { start: '2020-10-24', end: '2020-10-31'}, count: 254,
|
50
|
+
traits: ['liger', 'shale', 'PU30', 'daemonwings'] },
|
51
|
+
},
|
52
|
+
# 24.10.20 - New Purrstige - Meowfool
|
53
|
+
meowfool: { name: 'Meowfool',
|
54
|
+
recipe: {
|
55
|
+
time: { start: '2020-10-24', end: '2020-10-31'}, count: 388,
|
56
|
+
traits: ['shale', 'daemonwings', PU28_PU29] },
|
57
|
+
},
|
58
|
+
# 24.10.20 - New Purrstige - Meownificent
|
59
|
+
meownificent: { name: 'Meownificent',
|
60
|
+
recipe: {
|
61
|
+
time: { start: '2020-10-24', end: '2020-10-31'}, count: 260,
|
62
|
+
traits: [ 'liger', 'shale', 'PU30', WE00_WE15] },
|
63
|
+
},
|
64
|
+
# 24.10.20 - New Purrstige - Meowthulhu
|
65
|
+
meowthulhu: { name: 'Meowthulhu',
|
66
|
+
recipe: {
|
67
|
+
time: { start: '2020-10-24', end: '2020-10-31'}, count: 950,
|
68
|
+
traits: [ 'daemonwings', PU28_PU30] },
|
69
|
+
},
|
70
|
+
# 24.10.20 - New Purrstige - Meownique
|
71
|
+
meownique: { name: 'Meownique',
|
72
|
+
recipe: {
|
73
|
+
time: { start: '2020-10-24', end: '2020-10-31'}, count: 557,
|
74
|
+
traits: [ 'shale', PU28_PU29, WE00_WE15] },
|
75
|
+
},
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
PURRSTIGES_KITTENHEIM = {
|
81
|
+
# 07.11.19 - New Purrstige - Purrior
|
82
|
+
purrior: { name: 'Purrior',
|
83
|
+
recipe: {
|
84
|
+
time: { start: '2019-11-07', end: '2019-12-01' }, count: 120,
|
85
|
+
traits: [] },
|
86
|
+
},
|
87
|
+
# 06.11.19 - New Purrstige - Centurion
|
88
|
+
centurion: { name: 'Centurion',
|
89
|
+
recipe: {
|
90
|
+
time: { start: '2019-11-06', end: '2019-12-01' }, count: 144,
|
91
|
+
traits: [] },
|
92
|
+
},
|
93
|
+
# 03.11.19 - New Purrstige - Explorer
|
94
|
+
explorer: { name: 'Explorer',
|
95
|
+
recipe: {
|
96
|
+
time: { start: '2019-11-03', end: '2019-12-01' }, count: 162,
|
97
|
+
traits: ['lykoi', 'daemonhorns', ['rascal', 'camo'], 'PU28'] },
|
98
|
+
},
|
99
|
+
# 02.11.19 - New Purrstige - Guard
|
100
|
+
guard: { name: 'Guard',
|
101
|
+
recipe: {
|
102
|
+
time: { start: '2019-11-02', end: '2019-12-01' }, count: 220,
|
103
|
+
traits: [] },
|
104
|
+
},
|
105
|
+
# 01.11.19 - New Purrstige - Velite
|
106
|
+
velite: { name: 'Velite',
|
107
|
+
recipe: {
|
108
|
+
time: { start: '2019-11-01', end: '2019-12-01' }, count: 273,
|
109
|
+
traits: [] },
|
110
|
+
},
|
111
|
+
# 01.11.19 - New Purrstige - Scout
|
112
|
+
scout: { name: 'Scout',
|
113
|
+
recipe: {
|
114
|
+
time: { start: '2019-11-01', end: '2019-12-01' }, count: 140,
|
115
|
+
traits: [] },
|
116
|
+
},
|
117
|
+
# 02.11.19 - New Purrstige - Dominator
|
118
|
+
dominator: { name: 'Dominator',
|
119
|
+
recipe: {
|
120
|
+
time: { start: '2019-11-02', end: '2019-12-01' }, count: 141,
|
121
|
+
traits: ['lykoi', 'daemonhorns', PU24_PU27] },
|
122
|
+
},
|
123
|
+
|
124
|
+
# Nov 1, 2019 - Brassard trait is discovered. Purrstige
|
125
|
+
brassard: { name: 'Brassard',
|
126
|
+
recipe: {
|
127
|
+
time: { start: '2019-11-01', end: '2019-12-01' }, count: 793,
|
128
|
+
traits: [WE00_WE07, PU24_PU27] },
|
129
|
+
},
|
130
|
+
|
131
|
+
# Nov 1, 2019 - Aegis trait is discovered. Purrstige
|
132
|
+
aegis: { name: 'Aegis',
|
133
|
+
recipe: {
|
134
|
+
time: { start: '2019-11-01', end: '2019-12-01' }, count: 617,
|
135
|
+
traits: [] },
|
136
|
+
},
|
137
|
+
}
|
138
|
+
|
139
|
+
|
6
140
|
PURRSTIGES_ROBOKITTY = {
|
7
141
|
###
|
8
142
|
# May 1, 2019
|
9
143
|
# 7 Robokitty Purrstiges
|
144
|
+
|
145
|
+
# 12.12.19 - New Purrstige - Driver
|
146
|
+
driver: { name: 'Driver',
|
147
|
+
recipe: {
|
148
|
+
time: { start: '2019-12-12', end: '2019-12-13' }, count: 257,
|
149
|
+
traits: ['ragdoll', TOTESBASIC, WE00_WE15, 'drift', PU24_PU30] },
|
150
|
+
},
|
10
151
|
bionic: { name: 'Bionic',
|
11
152
|
recipe: {
|
12
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
153
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 624,
|
13
154
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU30'] }
|
14
155
|
},
|
15
156
|
fileshare: { name: 'Fileshare',
|
16
157
|
recipe: {
|
17
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
158
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 683,
|
18
159
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU29'] }
|
19
160
|
},
|
20
161
|
pawsfree: { name: 'Pawsfree',
|
21
162
|
recipe: {
|
22
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
163
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 430,
|
23
164
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU28'] }
|
24
165
|
},
|
25
166
|
uplink: { name: 'Uplink',
|
26
167
|
recipe: {
|
27
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
168
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 1151,
|
28
169
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU27'] }
|
29
170
|
},
|
30
171
|
gaunlet: { name: 'Gauntlet',
|
31
172
|
recipe: {
|
32
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
173
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 905,
|
33
174
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU26'] }
|
34
175
|
},
|
35
176
|
catterypack: { name: 'Catterypack',
|
36
177
|
recipe: {
|
37
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
178
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 513,
|
38
179
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU25'] }
|
39
180
|
},
|
40
181
|
squelch: { name: 'Squelch',
|
41
182
|
recipe: {
|
42
|
-
time: { start: '2019-05-01', end: '2019-08-31' },
|
183
|
+
time: { start: '2019-05-01', end: '2019-08-31' }, count: 828,
|
43
184
|
traits: ['ragdoll', 'WE05', TOTESBASIC, 'PU24'] }
|
44
185
|
}
|
45
186
|
}
|
@@ -143,6 +284,9 @@ inaband: { name: 'Inaband',
|
|
143
284
|
}
|
144
285
|
|
145
286
|
|
287
|
+
|
288
|
+
|
289
|
+
|
146
290
|
###############
|
147
291
|
## todo:
|
148
292
|
## - use PURRSTIGES_XMAS?! and other themes too - why? why not?
|
@@ -157,15 +301,36 @@ inaband: { name: 'Inaband',
|
|
157
301
|
PRESTIGES = PURRSTIGES =
|
158
302
|
{
|
159
303
|
|
304
|
+
# 01.01.20 - New Purrstige - Confettibox
|
305
|
+
confettibox: { name: 'Confettibox',
|
306
|
+
recipe: {
|
307
|
+
time: { start: '2020-01-01', end: '2020-01-15' }, count: 554,
|
308
|
+
traits: ['tinybox', 'PU26'] },
|
309
|
+
},
|
310
|
+
# 01.12.19 - New Purrstige - Celebration
|
311
|
+
celebration: { name: 'Celebration',
|
312
|
+
recipe: {
|
313
|
+
time: { start: '2019-12-01', end: '?' }, count: 1080,
|
314
|
+
traits: [EN00_EN15, PU16_PU29] },
|
315
|
+
},
|
316
|
+
# 01.12.19 - New Purrstige - Grandfinale
|
317
|
+
grandfinale: { name: 'Grandfinale',
|
318
|
+
recipe: {
|
319
|
+
time: { start: '2019-12-01', end: '?' }, count: 520,
|
320
|
+
traits: [EN00_EN15, 'PU30'] },
|
321
|
+
},
|
322
|
+
|
323
|
+
|
324
|
+
|
160
325
|
# Jun 28, 2019 - Werekitty trait is discovered. Purrstige
|
161
326
|
werekitty: { name: 'Werekitty',
|
162
327
|
recipe: {
|
163
328
|
time: { start: '2019-06-28', end: '2019-07-27' }, count: 438,
|
164
329
|
traits: ['moonrise', 'littlefoot', 'PU24',
|
165
|
-
|
330
|
+
EN00_EN15] },
|
166
331
|
desc: 'Monster Month Purrstige Trait'
|
167
332
|
},
|
168
|
-
|
333
|
+
|
169
334
|
##
|
170
335
|
# Mar 15, 2019
|
171
336
|
# Oohshiny trait is discovered. Purrstige
|
@@ -223,3 +388,5 @@ oohshiny: { name: 'Oohshiny',
|
|
223
388
|
}.merge( PURRSTIGES_ROBOKITTY )
|
224
389
|
.merge( PURRSTIGES_PIRATE )
|
225
390
|
.merge( PURRSTIGES_ALPACAT )
|
391
|
+
.merge( PURRSTIGES_KITTENHEIM )
|
392
|
+
.merge( PURRSTIGES_HACKATAO )
|
@@ -0,0 +1,135 @@
|
|
1
|
+
###
|
2
|
+
## Special Editions - Crypto Kitties
|
3
|
+
## see https://www.cryptokitties.co/catalogue/special-edition-cats
|
4
|
+
##
|
5
|
+
## These cool Kitties have limited edition art
|
6
|
+
## and are never obtainable through breeding
|
7
|
+
|
8
|
+
|
9
|
+
SPECIAL_EDITIONS = {
|
10
|
+
|
11
|
+
frostymcwhiskers: { name: 'Frosty McWhiskers', date: '2020-12-14',
|
12
|
+
specialedition: {
|
13
|
+
limit: 104 },
|
14
|
+
},
|
15
|
+
|
16
|
+
###
|
17
|
+
# The redemption window to claim to your very own Fannie Special Edition Kitty
|
18
|
+
# will be closing this Saturday. For each Fannie, you'll need to submit
|
19
|
+
# a unique trio of Wild West Kitties (one Pickett, one Reeves and one Dart)
|
20
|
+
# to our Kitty Bounty Wallet along with a valid submission form
|
21
|
+
# before the deadline on 12/5/2020 at 11:59pm PT
|
22
|
+
fannie: { name: 'Fannie', date: '2020-12-14', ## first/lowest id: #1_992_009
|
23
|
+
specialedition: {
|
24
|
+
limit: 58 },
|
25
|
+
},
|
26
|
+
|
27
|
+
# With transactions getting stuck and costs to gift Kitties soaring through the roofs,
|
28
|
+
# we've decided to extend the window to redeem your Katz band members
|
29
|
+
# for Special Edition Mascots.
|
30
|
+
# The new redemption window ends on September 1st, 11:59pm PT.
|
31
|
+
## Gas prices have slowed down redemption but there are currently
|
32
|
+
## 20 Algies and 30 Eddies earmarked for distribution.
|
33
|
+
|
34
|
+
algie: { name: 'Algie', date: '2020-10-29', ## first/lowest id: #1_137_676 !! - todo/check - first birthdate?
|
35
|
+
specialedition: {
|
36
|
+
limit: 179 },
|
37
|
+
},
|
38
|
+
|
39
|
+
eddie: { name: 'Eddie', date: '2020-09-03', # first/lowest id: #1_967_278
|
40
|
+
specialedition: {
|
41
|
+
limit: 110 },
|
42
|
+
},
|
43
|
+
|
44
|
+
marty: { name: 'Marty', date: '2020-09-01',
|
45
|
+
specialedition: {
|
46
|
+
limit: 188 },
|
47
|
+
desc: 'Collaboration with Muse',
|
48
|
+
},
|
49
|
+
|
50
|
+
pandora: { name: 'Pandora', date: '2020-07-31',
|
51
|
+
specialedition: {
|
52
|
+
limit: 50 },
|
53
|
+
desc: 'CryptoKitty Box Support',
|
54
|
+
},
|
55
|
+
|
56
|
+
holli: { name: 'Holli', date: '2020-07-03', # first/lowest id: #1_949_215
|
57
|
+
specialedition: {
|
58
|
+
limit: 59 },
|
59
|
+
},
|
60
|
+
|
61
|
+
kikuyu: { name: 'Kikuyu', date: '2020-06-13',
|
62
|
+
specialedition: {
|
63
|
+
limit: 263 },
|
64
|
+
desc: 'For Hunter+Zelig+Bodhi',
|
65
|
+
},
|
66
|
+
|
67
|
+
flowtron: { name: 'Flowtron', date: '2020-05-21',
|
68
|
+
specialedition: {
|
69
|
+
limit: 303 },
|
70
|
+
desc: 'Exchange on Flow Fancy Set',
|
71
|
+
},
|
72
|
+
|
73
|
+
catterina: { name: 'Catterina', date: '2020-05-13',
|
74
|
+
specialedition: {
|
75
|
+
limit: 100 },
|
76
|
+
desc: 'Momo Wang',
|
77
|
+
},
|
78
|
+
|
79
|
+
negabillie: { name: 'Nega Billie', date: '2020-04-27',
|
80
|
+
specialedition: {
|
81
|
+
limit: 68 },
|
82
|
+
},
|
83
|
+
|
84
|
+
##############
|
85
|
+
# 2019
|
86
|
+
carl: { name: 'Carl', date: '2019-08-20', # first/lowest id: #1_680_709
|
87
|
+
specialedition: {
|
88
|
+
limit: 40 },
|
89
|
+
},
|
90
|
+
|
91
|
+
alice: { name: 'Alice', date: '2019-08-23', # first/lowest id: #1_681_913
|
92
|
+
specialedition: {
|
93
|
+
limit: 88 },
|
94
|
+
},
|
95
|
+
|
96
|
+
|
97
|
+
'kitt-e': { name: 'KITT-E', date: '2019-05-10',
|
98
|
+
specialedition: {
|
99
|
+
limit: 500 },
|
100
|
+
desc: 'Dapper (Crypto Contract) Wallet Promotion Cat'
|
101
|
+
},
|
102
|
+
# Apr 10, 2019 - Sparkles Special Edition Cat is released.Special Edition Cat
|
103
|
+
sparkles: { name: 'Sparkles', date: '2019-04-10',
|
104
|
+
specialedition: {
|
105
|
+
limit: 100 },
|
106
|
+
desc: 'Freebie for CryptoKitties Community Events'
|
107
|
+
},
|
108
|
+
|
109
|
+
## date: '2019-01-10 ??? -- use for date "announced" or something - why? why not?
|
110
|
+
aeoncat: { name: 'Aeoncat',
|
111
|
+
specialedition: {
|
112
|
+
time: { start: '2019-01-17', end: '2019-01-28' },
|
113
|
+
limit: 380 }, ## Don't sleep - there's only 380 up for grabs!
|
114
|
+
desc: 'Goddess Aeona - Goddess of Nature - Gods Unchained Promotion'
|
115
|
+
},
|
116
|
+
|
117
|
+
#############################
|
118
|
+
## 2018
|
119
|
+
## December
|
120
|
+
catzy: { name: 'Catzy', date: '2018-12-31',
|
121
|
+
specialedition: {
|
122
|
+
limit: 10, ids: (1137653..1137662).to_a },
|
123
|
+
desc: 'Changpeng "CZ" Zhao - CEO of Binance - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
|
124
|
+
},
|
125
|
+
purremyallaire: { name: 'Purremy Allaire', date: '2018-12-31',
|
126
|
+
specialedition: {
|
127
|
+
limit: 10, ids: (1137663..1137672).to_a },
|
128
|
+
desc: 'Jeremy Allaire - Top 10 Blockchain Influencer of the Year 2018 by CoinDesk'
|
129
|
+
},
|
130
|
+
lilbub: { name: 'Lil Bub Ub Bub (BUB)', date: '2018-11-13',
|
131
|
+
specialedition: {
|
132
|
+
limit: 500 }
|
133
|
+
},
|
134
|
+
}
|
135
|
+
|
data/lib/kittyverse/fancies.rb
CHANGED
@@ -141,6 +141,9 @@ class Fancy
|
|
141
141
|
## auto-fill fancies
|
142
142
|
FANCIES.each do |key,h|
|
143
143
|
|
144
|
+
puts "fancy:"
|
145
|
+
pp h
|
146
|
+
|
144
147
|
name = h[:name]
|
145
148
|
name_cn = h[:name_cn] # add chinese name if present
|
146
149
|
|
@@ -174,7 +177,7 @@ class Fancy
|
|
174
177
|
variants: h[:recipe][:variants], ## todo/fix: turn variant hash into variant ??? - why? why not?
|
175
178
|
limit: h[:recipe][:limit],
|
176
179
|
time_start: h[:recipe][:time] && h[:recipe][:time][:start] ? Date.strptime( h[:recipe][:time][:start], '%Y-%m-%d' ) : nil,
|
177
|
-
time_end: h[:recipe][:time] && h[:recipe][:time][:end]
|
180
|
+
time_end: h[:recipe][:time] && h[:recipe][:time][:end] && h[:recipe][:time][:end] != '?' ? Date.strptime( h[:recipe][:time][:end], '%Y-%m-%d' ) : nil )
|
178
181
|
|
179
182
|
## note: support overflow "shortcut" - overflow+limit => count
|
180
183
|
count = if h[:recipe][:overflow]
|
data/lib/kittyverse/version.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
1
|
class Kittyverse
|
5
2
|
|
6
|
-
MAJOR =
|
7
|
-
MINOR =
|
3
|
+
MAJOR = 1
|
4
|
+
MINOR = 0
|
8
5
|
PATCH = 0
|
9
6
|
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
10
7
|
|
@@ -13,11 +10,11 @@ class Kittyverse
|
|
13
10
|
end
|
14
11
|
|
15
12
|
def self.banner
|
16
|
-
"kittyverse/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
13
|
+
"kittyverse/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] in (#{root})"
|
17
14
|
end
|
18
15
|
|
19
16
|
def self.root
|
20
|
-
|
17
|
+
File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
|
21
18
|
end
|
22
19
|
|
23
20
|
end # module Kittyverse
|
data/test/test_cattributes.rb
CHANGED
data/test/test_fancies.rb
CHANGED