kittyverse 0.4.5 → 0.5.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.
@@ -1,120 +1,120 @@
1
- # encoding: utf-8
2
-
3
- ##################################
4
- # Tier 0 (Base) (1-g)
5
- # Tier 1 (Mewtation I) (h-p)
6
- # Tier 2 (Mewtation II) (q-t)
7
- # Tier 3 (Mewtation III) (u,v)
8
- # Tier 4 (Mewtation IIII) (w) # note: use IIII instead of IV
9
- #
10
-
11
- MUTATION_TIER = { ## todo/fix: use an algo to calculate - why? why not?
12
- '1' => 0,
13
- '2' => 0,
14
- '3' => 0,
15
- '4' => 0,
16
- '5' => 0,
17
- '6' => 0,
18
- '7' => 0,
19
- '8' => 0,
20
- '9' => 0,
21
- 'a' => 0,
22
- 'b' => 0,
23
- 'c' => 0,
24
- 'd' => 0,
25
- 'e' => 0,
26
- 'f' => 0,
27
- 'g' => 0,
28
- 'h' => 1,
29
- 'i' => 1,
30
- 'j' => 1,
31
- 'k' => 1,
32
- 'm' => 1,
33
- 'n' => 1,
34
- 'o' => 1,
35
- 'p' => 1,
36
- 'q' => 2,
37
- 'r' => 2,
38
- 's' => 2,
39
- 't' => 2,
40
- 'u' => 3,
41
- 'v' => 3,
42
- 'w' => 4,
43
- 'x' => nil
44
- }
45
-
46
- ## (quick 'n' dirty) kai to mutation/mewtation tier level in roman numerals (I,II,III,IIII) - as strings (and nil)
47
- MUTATION_TIER_ROMAN = {
48
- '1' => '',
49
- '2' => '',
50
- '3' => '',
51
- '4' => '',
52
- '5' => '',
53
- '6' => '',
54
- '7' => '',
55
- '8' => '',
56
- '9' => '',
57
- 'a' => '',
58
- 'b' => '',
59
- 'c' => '',
60
- 'd' => '',
61
- 'e' => '',
62
- 'f' => '',
63
- 'g' => '',
64
- 'h' => 'I',
65
- 'i' => 'I',
66
- 'j' => 'I',
67
- 'k' => 'I',
68
- 'm' => 'I',
69
- 'n' => 'I',
70
- 'o' => 'I',
71
- 'p' => 'I',
72
- 'q' => 'II',
73
- 'r' => 'II',
74
- 's' => 'II',
75
- 't' => 'II',
76
- 'u' => 'III',
77
- 'v' => 'III',
78
- 'w' => 'IIII',
79
- 'x' => '' ## Use nil and NOT empty string "" - why? why not?
80
- }
81
-
82
- MUTATION_PAIR = {
83
- '1' => '', ## todo: use nil for "" - why? why not?
84
- '2' => '',
85
- '3' => '',
86
- '4' => '',
87
- '5' => '',
88
- '6' => '',
89
- '7' => '',
90
- '8' => '',
91
- '9' => '',
92
- 'a' => '',
93
- 'b' => '',
94
- 'c' => '',
95
- 'd' => '',
96
- 'e' => '',
97
- 'f' => '',
98
- 'g' => '',
99
- 'h' => '1+2',
100
- 'i' => '3+4',
101
- 'j' => '5+6',
102
- 'k' => '7+8',
103
- 'm' => '9+a',
104
- 'n' => 'b+c',
105
- 'o' => 'd+e',
106
- 'p' => 'f+g',
107
- 'q' => 'h+i',
108
- 'r' => 'j+k',
109
- 's' => 'm+n',
110
- 't' => 'o+p',
111
- 'u' => 'q+r',
112
- 'v' => 's+t',
113
- 'w' => 'u+v',
114
- 'x' => ''
115
- }
116
-
117
- ## add alias(es)
118
- MEWTATION_TIER = MUTATION_TIER
119
- MEWTATION_TIER_ROMAN = MUTATION_TIER_ROMAN
120
- MEWTATION_PAIR = MUTATION_PAIR
1
+ # encoding: utf-8
2
+
3
+ ##################################
4
+ # Tier 0 (Base) (1-g)
5
+ # Tier 1 (Mewtation I) (h-p)
6
+ # Tier 2 (Mewtation II) (q-t)
7
+ # Tier 3 (Mewtation III) (u,v)
8
+ # Tier 4 (Mewtation IIII) (w) # note: use IIII instead of IV
9
+ #
10
+
11
+ MUTATION_TIER = { ## todo/fix: use an algo to calculate - why? why not?
12
+ '1' => 0,
13
+ '2' => 0,
14
+ '3' => 0,
15
+ '4' => 0,
16
+ '5' => 0,
17
+ '6' => 0,
18
+ '7' => 0,
19
+ '8' => 0,
20
+ '9' => 0,
21
+ 'a' => 0,
22
+ 'b' => 0,
23
+ 'c' => 0,
24
+ 'd' => 0,
25
+ 'e' => 0,
26
+ 'f' => 0,
27
+ 'g' => 0,
28
+ 'h' => 1,
29
+ 'i' => 1,
30
+ 'j' => 1,
31
+ 'k' => 1,
32
+ 'm' => 1,
33
+ 'n' => 1,
34
+ 'o' => 1,
35
+ 'p' => 1,
36
+ 'q' => 2,
37
+ 'r' => 2,
38
+ 's' => 2,
39
+ 't' => 2,
40
+ 'u' => 3,
41
+ 'v' => 3,
42
+ 'w' => 4,
43
+ 'x' => nil
44
+ }
45
+
46
+ ## (quick 'n' dirty) kai to mutation/mewtation tier level in roman numerals (I,II,III,IIII) - as strings (and nil)
47
+ MUTATION_TIER_ROMAN = {
48
+ '1' => '',
49
+ '2' => '',
50
+ '3' => '',
51
+ '4' => '',
52
+ '5' => '',
53
+ '6' => '',
54
+ '7' => '',
55
+ '8' => '',
56
+ '9' => '',
57
+ 'a' => '',
58
+ 'b' => '',
59
+ 'c' => '',
60
+ 'd' => '',
61
+ 'e' => '',
62
+ 'f' => '',
63
+ 'g' => '',
64
+ 'h' => 'I',
65
+ 'i' => 'I',
66
+ 'j' => 'I',
67
+ 'k' => 'I',
68
+ 'm' => 'I',
69
+ 'n' => 'I',
70
+ 'o' => 'I',
71
+ 'p' => 'I',
72
+ 'q' => 'II',
73
+ 'r' => 'II',
74
+ 's' => 'II',
75
+ 't' => 'II',
76
+ 'u' => 'III',
77
+ 'v' => 'III',
78
+ 'w' => 'IIII',
79
+ 'x' => '' ## Use nil and NOT empty string "" - why? why not?
80
+ }
81
+
82
+ MUTATION_PAIR = {
83
+ '1' => '', ## todo: use nil for "" - why? why not?
84
+ '2' => '',
85
+ '3' => '',
86
+ '4' => '',
87
+ '5' => '',
88
+ '6' => '',
89
+ '7' => '',
90
+ '8' => '',
91
+ '9' => '',
92
+ 'a' => '',
93
+ 'b' => '',
94
+ 'c' => '',
95
+ 'd' => '',
96
+ 'e' => '',
97
+ 'f' => '',
98
+ 'g' => '',
99
+ 'h' => '1+2',
100
+ 'i' => '3+4',
101
+ 'j' => '5+6',
102
+ 'k' => '7+8',
103
+ 'm' => '9+a',
104
+ 'n' => 'b+c',
105
+ 'o' => 'd+e',
106
+ 'p' => 'f+g',
107
+ 'q' => 'h+i',
108
+ 'r' => 'j+k',
109
+ 's' => 'm+n',
110
+ 't' => 'o+p',
111
+ 'u' => 'q+r',
112
+ 'v' => 's+t',
113
+ 'w' => 'u+v',
114
+ 'x' => ''
115
+ }
116
+
117
+ ## add alias(es)
118
+ MEWTATION_TIER = MUTATION_TIER
119
+ MEWTATION_TIER_ROMAN = MUTATION_TIER_ROMAN
120
+ MEWTATION_PAIR = MUTATION_PAIR
@@ -1,23 +1,23 @@
1
- # encoding: utf-8
2
-
3
-
4
- class Kittyverse
5
-
6
- MAJOR = 0
7
- MINOR = 4
8
- PATCH = 5
9
- VERSION = [MAJOR,MINOR,PATCH].join('.')
10
-
11
- def self.version
12
- VERSION
13
- end
14
-
15
- def self.banner
16
- "kittyverse/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
17
- end
18
-
19
- def self.root
20
- "#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
21
- end
22
-
23
- end # module Kittyverse
1
+ # encoding: utf-8
2
+
3
+
4
+ class Kittyverse
5
+
6
+ MAJOR = 0
7
+ MINOR = 5
8
+ PATCH = 0
9
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
10
+
11
+ def self.version
12
+ VERSION
13
+ end
14
+
15
+ def self.banner
16
+ "kittyverse/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
17
+ end
18
+
19
+ def self.root
20
+ "#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
21
+ end
22
+
23
+ end # module Kittyverse
@@ -1,10 +1,10 @@
1
- ## $:.unshift(File.dirname(__FILE__))
2
-
3
- ## minitest setup
4
-
5
- require 'minitest/autorun'
6
-
7
-
8
- ## our own code
9
-
10
- require 'kittyverse'
1
+ ## $:.unshift(File.dirname(__FILE__))
2
+
3
+ ## minitest setup
4
+
5
+ require 'minitest/autorun'
6
+
7
+
8
+ ## our own code
9
+
10
+ require 'kittyverse'
@@ -36,6 +36,22 @@ def test_bugcat_v2
36
36
  end
37
37
  end
38
38
 
39
+ def test_djmeowlody
40
+ [ Fancy[ 'DJ Meowlody' ],
41
+ Fancy[ :djmeowlody ]
42
+ ].each do |fancy|
43
+ assert_equal 'DJ Meowlody', fancy.name
44
+ assert_equal :djmeowlody, fancy.key
45
+ assert fancy.exclusive? == false
46
+ assert fancy.specialedition? == false
47
+ assert fancy.special_edition? == false
48
+
49
+ assert fancy.time?
50
+ assert fancy.recipe?
51
+ assert fancy.recipe.time?
52
+ assert 4, fancy.recipe.traits.size # ['happygokitty', 'ragdoll', 'tigerpunk', 'oceanid']
53
+ end
54
+ end
39
55
 
40
56
  def test_curdlin
41
57
  fancy = Fancy[ 'Curdlin' ]
@@ -0,0 +1,62 @@
1
+
2
+ pp genome[0].class
3
+ pp genome[0].name
4
+ pp genome[0].code
5
+
6
+ pp genome[5].class
7
+ pp genome[5].name
8
+ pp genome[5].code
9
+
10
+ pp genome[40].class
11
+ pp genome[40].name
12
+ pp genome[40].code
13
+
14
+
15
+ pp genome.body.class
16
+ pp genome.body.type.name
17
+ pp genome.body.type.code
18
+
19
+ pp genome[:body].class
20
+ pp genome[:body].type.name
21
+ pp genome[:body].type.code
22
+
23
+ pp genome.fu.class
24
+ pp genome.fu.type.name
25
+ pp genome.fu.type.code
26
+
27
+ pp genome[:FU].class
28
+ pp genome[:FU].type.name
29
+ pp genome[:FU].type.code
30
+
31
+ pp genome.body.d.class
32
+ pp genome.body.d.name
33
+ pp genome.body.d.code
34
+
35
+ pp genome[:body].d.class
36
+ pp genome[:body].d.name
37
+ pp genome[:body].d.code
38
+
39
+ pp genome.fu.d.class
40
+ pp genome.fu.d.name
41
+ pp genome.fu.d.code
42
+
43
+ pp genome.fu.r1.class
44
+ pp genome.fu.r1.name
45
+ pp genome.fu.r1.code
46
+
47
+ pp genome.body[0].class
48
+ pp genome.body[0].name
49
+ pp genome.body[0].code
50
+
51
+ pp genome.body[1].class
52
+ pp genome.body[1].name
53
+ pp genome.body[1].code
54
+
55
+ pp genome.fu[0].class
56
+ pp genome.fu[0].name
57
+ pp genome.fu[0].code
58
+
59
+ pp genome[:body][0].class
60
+ pp genome[:body][0].name
61
+ pp genome[:body][0].code
62
+
@@ -1,174 +1,174 @@
1
- # encoding: utf-8
2
-
3
- ###
4
- # to run use
5
- # ruby -I ./lib -I ./test test/test_traits.rb
6
-
7
-
8
- require 'helper'
9
-
10
-
11
- class TestTraits < MiniTest::Test
12
-
13
-
14
- def test_savannah
15
- [ Trait[ 'FU00' ],
16
- Trait.find_by_code( 'FU00' ),
17
- Trait.find_by( code: 'FU00' ),
18
- Trait[ 'savannah' ],
19
- Trait[ 'Savannah' ],
20
- Trait.find_by_name( 'Savannah' ),
21
- Trait.find_by( name: 'Savannah' ),
22
- Traits[ 'FU00' ],
23
- Traits[ 'savannah' ],
24
- Traits[ 'Savannah' ],
25
- Traits[ :body ][ '1' ],
26
- Traits[ :body ][ '00' ],
27
- Traits[ :body ][ 0 ],
28
- Traits['FU']['00'],
29
- Traits['FU'][0],
30
- Traits[:FU][0],
31
- Traits[:FU00],
32
- Traits['Fur'][0]
33
- ].each do |t|
34
- assert_equal Trait, t.class
35
- assert_equal "Savannah", t.name
36
- assert_equal "Fur", t.type.name
37
- assert_equal "FU00", t.code
38
- assert_equal "1", t.kai
39
- assert_equal 0, t.num
40
- assert_equal "00000", t.bin
41
- assert_equal "00000", t.binary
42
- assert_equal 0, t.tier
43
- assert_equal "", t.tier_roman
44
- assert_equal "", t.tier(:roman)
45
- assert t.base?
46
- assert t.m1? == false
47
- assert t.m2? == false
48
- assert t.m3? == false
49
- assert t.m4? == false
50
- end
51
- end
52
-
53
- def test_moonrise
54
- t = Trait[ 'Moonrise' ]
55
- assert_equal "PA30", t.code
56
- assert_equal "w", t.kai
57
- assert_equal 30, t.num
58
- assert_equal "11110", t.bin
59
- assert_equal "11110", t.binary
60
- assert_equal 4, t.tier
61
- assert_equal 4, t.level
62
- assert_equal 4, t.m
63
- assert_equal "IIII", t.tier_roman
64
- assert_equal "IIII", t.tier(:roman)
65
- assert_equal "IIII", t.level(:roman)
66
- assert_equal "IIII", t.m(:roman)
67
- assert t.base? == false
68
- assert t.m1? == false
69
- assert t.m2? == false
70
- assert t.m3? == false
71
- assert t.m4?
72
- end
73
-
74
-
75
- def test_totesbasic
76
- [ Trait.find_by_name( 'totesbasic 1' ),
77
- Trait.find_by_name( 'totesbasic_1' ),
78
- Trait.find_by_name( 'totesbasic (14)' ),
79
- Trait.find_by_name( 'totesbasic_14' ),
80
- Trait.find_by_name( 'totesbasic (f)' ),
81
- Trait.find_by_name( 'totesbasic_f' ),
82
- Trait[ 'totesbasic 1' ],
83
- Trait[ 'totesbasic_1' ],
84
- ].each do |t|
85
- assert_equal Trait, t.class
86
- assert_equal "Totesbasic 1", t.name
87
- assert_equal "Pattern", t.type.name
88
- assert_equal "PA14", t.code
89
- assert_equal "f", t.kai
90
- assert_equal 14, t.num
91
- assert t.base?
92
- assert_equal 0, t.tier
93
- assert_equal "", t.tier_roman
94
- assert_equal "", t.tier(:roman)
95
- end
96
- end
97
-
98
-
99
- def test_fu31
100
- [ Traits[ :body ][ 'x' ],
101
- Traits[ :body ][ '31' ],
102
- Traits[ :body ][ 31 ]
103
- ].each do |t|
104
- assert_equal Trait, t.class
105
- assert t.name == nil
106
- assert_equal "Fur", t.type.name
107
- assert_equal "FU31", t.code
108
- assert_equal "x", t.kai
109
- assert_equal 31, t.num
110
- assert_equal "11111", t.bin
111
- assert_equal "11111", t.binary
112
- assert t.tier == nil
113
- assert t.level == nil
114
- assert t.m == nil
115
- assert_equal "", t.tier_roman
116
- assert_equal "", t.tier(:roman)
117
- assert_equal "", t.level(:roman)
118
- assert_equal "", t.m(:roman)
119
- assert t.base? == false
120
- assert t.m1? == false
121
- assert t.m2? == false
122
- assert t.m3? == false
123
- assert t.m4? == false
124
- end
125
- end
126
-
127
- def test_vigilante
128
- [ Traits['Pattern'][0],
129
- Traits['PA00'],
130
- Traits['Vigilante']
131
- ].each do |t|
132
- assert_equal Trait, t.class
133
- assert_equal "Vigilante", t.name
134
- assert_equal "Pattern", t.type.name
135
- assert_equal "PA00", t.code
136
- assert_equal "1", t.kai
137
- assert_equal 0, t.num
138
- end
139
- end
140
-
141
- def test_body
142
- [ Traits[ :body ],
143
- TraitType.find_by_key( :body ),
144
- TraitType.find_by( :key => :body )
145
- ].each do |tt|
146
- assert_equal TraitType, tt.class
147
- assert_equal "Fur", tt.name
148
- assert_equal :body, tt.key
149
- assert_equal 32, tt.traits.size
150
- end
151
- end
152
-
153
-
154
-
155
-
156
- def test_each
157
- Traits.each do |type|
158
- puts "#{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
159
- end
160
-
161
- Traits.each_with_index do |type,i|
162
- puts "#{i}: #{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
163
- end
164
-
165
- TraitType.each do |type|
166
- puts "#{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
167
- end
168
-
169
- TraitType.each_with_index do |type,i|
170
- puts "#{i}: #{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
171
- end
172
- end
173
-
174
- end # class TestTraits
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_traits.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+
11
+ class TestTraits < MiniTest::Test
12
+
13
+
14
+ def test_savannah
15
+ [ Trait[ 'FU00' ],
16
+ Trait.find_by_code( 'FU00' ),
17
+ Trait.find_by( code: 'FU00' ),
18
+ Trait[ 'savannah' ],
19
+ Trait[ 'Savannah' ],
20
+ Trait.find_by_name( 'Savannah' ),
21
+ Trait.find_by( name: 'Savannah' ),
22
+ Traits[ 'FU00' ],
23
+ Traits[ 'savannah' ],
24
+ Traits[ 'Savannah' ],
25
+ Traits[ :body ][ '1' ],
26
+ Traits[ :body ][ '00' ],
27
+ Traits[ :body ][ 0 ],
28
+ Traits['FU']['00'],
29
+ Traits['FU'][0],
30
+ Traits[:FU][0],
31
+ Traits[:FU00],
32
+ Traits['Fur'][0]
33
+ ].each do |t|
34
+ assert_equal Trait, t.class
35
+ assert_equal "Savannah", t.name
36
+ assert_equal "Fur", t.type.name
37
+ assert_equal "FU00", t.code
38
+ assert_equal "1", t.kai
39
+ assert_equal 0, t.num
40
+ assert_equal "00000", t.bin
41
+ assert_equal "00000", t.binary
42
+ assert_equal 0, t.tier
43
+ assert_equal "", t.tier_roman
44
+ assert_equal "", t.tier(:roman)
45
+ assert t.base?
46
+ assert t.m1? == false
47
+ assert t.m2? == false
48
+ assert t.m3? == false
49
+ assert t.m4? == false
50
+ end
51
+ end
52
+
53
+ def test_moonrise
54
+ t = Trait[ 'Moonrise' ]
55
+ assert_equal "PA30", t.code
56
+ assert_equal "w", t.kai
57
+ assert_equal 30, t.num
58
+ assert_equal "11110", t.bin
59
+ assert_equal "11110", t.binary
60
+ assert_equal 4, t.tier
61
+ assert_equal 4, t.level
62
+ assert_equal 4, t.m
63
+ assert_equal "IIII", t.tier_roman
64
+ assert_equal "IIII", t.tier(:roman)
65
+ assert_equal "IIII", t.level(:roman)
66
+ assert_equal "IIII", t.m(:roman)
67
+ assert t.base? == false
68
+ assert t.m1? == false
69
+ assert t.m2? == false
70
+ assert t.m3? == false
71
+ assert t.m4?
72
+ end
73
+
74
+
75
+ def test_totesbasic
76
+ [ Trait.find_by_name( 'totesbasic 1' ),
77
+ Trait.find_by_name( 'totesbasic_1' ),
78
+ Trait.find_by_name( 'totesbasic (14)' ),
79
+ Trait.find_by_name( 'totesbasic_14' ),
80
+ Trait.find_by_name( 'totesbasic (f)' ),
81
+ Trait.find_by_name( 'totesbasic_f' ),
82
+ Trait[ 'totesbasic 1' ],
83
+ Trait[ 'totesbasic_1' ],
84
+ ].each do |t|
85
+ assert_equal Trait, t.class
86
+ assert_equal "Totesbasic 1", t.name
87
+ assert_equal "Pattern", t.type.name
88
+ assert_equal "PA14", t.code
89
+ assert_equal "f", t.kai
90
+ assert_equal 14, t.num
91
+ assert t.base?
92
+ assert_equal 0, t.tier
93
+ assert_equal "", t.tier_roman
94
+ assert_equal "", t.tier(:roman)
95
+ end
96
+ end
97
+
98
+
99
+ def test_fu31
100
+ [ Traits[ :body ][ 'x' ],
101
+ Traits[ :body ][ '31' ],
102
+ Traits[ :body ][ 31 ]
103
+ ].each do |t|
104
+ assert_equal Trait, t.class
105
+ assert t.name == nil
106
+ assert_equal "Fur", t.type.name
107
+ assert_equal "FU31", t.code
108
+ assert_equal "x", t.kai
109
+ assert_equal 31, t.num
110
+ assert_equal "11111", t.bin
111
+ assert_equal "11111", t.binary
112
+ assert t.tier == nil
113
+ assert t.level == nil
114
+ assert t.m == nil
115
+ assert_equal "", t.tier_roman
116
+ assert_equal "", t.tier(:roman)
117
+ assert_equal "", t.level(:roman)
118
+ assert_equal "", t.m(:roman)
119
+ assert t.base? == false
120
+ assert t.m1? == false
121
+ assert t.m2? == false
122
+ assert t.m3? == false
123
+ assert t.m4? == false
124
+ end
125
+ end
126
+
127
+ def test_vigilante
128
+ [ Traits['Pattern'][0],
129
+ Traits['PA00'],
130
+ Traits['Vigilante']
131
+ ].each do |t|
132
+ assert_equal Trait, t.class
133
+ assert_equal "Vigilante", t.name
134
+ assert_equal "Pattern", t.type.name
135
+ assert_equal "PA00", t.code
136
+ assert_equal "1", t.kai
137
+ assert_equal 0, t.num
138
+ end
139
+ end
140
+
141
+ def test_body
142
+ [ Traits[ :body ],
143
+ TraitType.find_by_key( :body ),
144
+ TraitType.find_by( :key => :body )
145
+ ].each do |tt|
146
+ assert_equal TraitType, tt.class
147
+ assert_equal "Fur", tt.name
148
+ assert_equal :body, tt.key
149
+ assert_equal 32, tt.traits.size
150
+ end
151
+ end
152
+
153
+
154
+
155
+
156
+ def test_each
157
+ Traits.each do |type|
158
+ puts "#{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
159
+ end
160
+
161
+ Traits.each_with_index do |type,i|
162
+ puts "#{i}: #{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
163
+ end
164
+
165
+ TraitType.each do |type|
166
+ puts "#{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
167
+ end
168
+
169
+ TraitType.each_with_index do |type,i|
170
+ puts "#{i}: #{type.key} => #{type.name} (#{type.code}), genes #{type.genes}"
171
+ end
172
+ end
173
+
174
+ end # class TestTraits