classx 0.0.3 → 0.0.4

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.
Files changed (57) hide show
  1. data/ChangeLog +354 -0
  2. data/README +5 -0
  3. data/Rakefile +2 -2
  4. data/bench/attribute_get.rb +73 -0
  5. data/bench/attribute_set.rb +53 -19
  6. data/bench/define_attribute.rb +226 -0
  7. data/bench/initialize.rb +25 -7
  8. data/doc/output/coverage/index.html +74 -128
  9. data/doc/output/coverage/lib-classx-attribute_rb.html +291 -190
  10. data/doc/output/coverage/lib-classx-attributes_rb.html +167 -101
  11. data/doc/output/coverage/lib-classx-bracketable_rb.html +671 -0
  12. data/doc/output/coverage/lib-classx-class_attributes_rb.html +775 -0
  13. data/doc/output/coverage/lib-classx-commandable_rb.html +727 -0
  14. data/doc/output/coverage/{-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html → lib-classx-declare_rb.html} +60 -62
  15. data/doc/output/coverage/lib-classx-validate_rb.html +43 -41
  16. data/doc/output/coverage/lib-classx_rb.html +208 -78
  17. data/example/commandable.rb +1 -0
  18. data/lib/classx.rb +146 -16
  19. data/lib/classx/attribute.rb +244 -143
  20. data/lib/classx/attributes.rb +93 -27
  21. data/lib/classx/bracketable.rb +61 -0
  22. data/lib/classx/class_attributes.rb +165 -0
  23. data/lib/classx/commandable.rb +55 -4
  24. data/lib/classx/declare.rb +40 -3
  25. data/lib/classx/role/logger.rb +17 -13
  26. data/lib/classx/validate.rb +26 -24
  27. data/spec/classx/handles_spec.rb +21 -6
  28. data/spec/classx/serialize_spec.rb +57 -0
  29. data/spec/classx/{with_coerce.rb → with_coerce_spec.rb} +0 -0
  30. data/spec/classx/with_extend_spec.rb +58 -0
  31. data/spec/classx/with_include_spec.rb +58 -0
  32. data/spec/classx/with_validate_spec.rb +363 -0
  33. data/spec/classx/without_anyoption_spec.rb +1 -1
  34. data/spec/classx/writable_option_spec.rb +29 -4
  35. data/spec/classx_bracketable_spec.rb +160 -0
  36. data/spec/classx_class_attributes/default_option_spec.rb +121 -0
  37. data/spec/classx_class_attributes/dsl_accessor_spec.rb +88 -0
  38. data/spec/classx_class_attributes/handles_spec.rb +77 -0
  39. data/spec/classx_class_attributes/with_coerce_spec.rb +119 -0
  40. data/spec/classx_class_attributes/with_extend_spec.rb +64 -0
  41. data/spec/classx_class_attributes/with_include_spec.rb +64 -0
  42. data/spec/classx_class_attributes/with_multiple_class_spec.rb +60 -0
  43. data/spec/classx_class_attributes/with_validate_spec.rb +248 -0
  44. data/spec/classx_class_attributes/without_accessor_spec.rb +19 -0
  45. data/spec/classx_class_attributes/without_anyoption_spec.rb +21 -0
  46. data/spec/classx_class_attributes/writable_option_spec.rb +100 -0
  47. data/spec/classx_declare_spec.rb +117 -0
  48. data/spec/classx_validate_spec.rb +1 -3
  49. data/tasks/basic_tasks.rake +1 -1
  50. metadata +36 -26
  51. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +0 -932
  52. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +0 -779
  53. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +0 -867
  54. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +0 -1715
  55. data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +0 -1598
  56. data/spec/classx/with_extend.rb +0 -27
  57. data/spec/classx/with_include.rb +0 -27
@@ -24,33 +24,67 @@ COUNT = 1000
24
24
  point_with_classx = PointWithClassX.new({ :x => 0, :y => 0, :z => 0 })
25
25
  point_without_classx = PointWithoutClassX.new({ :x => 0, :y => 0, :z => 0 })
26
26
 
27
- Benchmark.bm do |x|
28
- x.report 'classx' do
29
- COUNT.times do
30
- point_with_classx.x = rand(10)
31
- point_with_classx.y = rand(10)
32
- point_with_classx.z = rand(10)
27
+ def do_bench klass, style=:equal
28
+ GC.disable
29
+ COUNT.times do
30
+ if style == :equal
31
+ klass.__send__ :x=, rand(10)
32
+ klass.__send__ :y=, rand(10)
33
+ klass.__send__ :z=, rand(10)
34
+ elsif style == :getter_with_arg
35
+ klass.__send__ :x, rand(10)
36
+ klass.__send__ :y, rand(10)
37
+ klass.__send__ :z, rand(10)
33
38
  end
34
39
  end
40
+ GC.enable
41
+ end
42
+
43
+ Benchmark.bm do |x|
44
+ x.report 'classx with attr_name = val' do
45
+ do_bench point_with_classx
46
+ end
47
+ x.report 'classx with attr_name(val)' do
48
+ do_bench point_with_classx, :getter_with_arg
49
+ end
35
50
  x.report 'normal class' do
36
- COUNT.times do
37
- point_without_classx.x = rand(10)
38
- point_without_classx.y = rand(10)
39
- point_without_classx.z = rand(10)
40
- end
51
+ do_bench point_without_classx
41
52
  end
42
53
  end
43
54
 
44
55
  # On my environment( MacBook1.1 Intel Core Duo 1.83 GHz, 2GB), result is like that. TOOOOO SLOOOW classX!!!!.
45
56
  #
46
57
  # ----------------------------------------------------------
47
- # result after 633f7e88
48
- # user system total real
49
- # classx 0.080000 0.010000 0.090000 ( 0.097012)
50
- # normal class 0.010000 0.000000 0.010000 ( 0.001508)
58
+ # result after 92ed088b ( before 0.0.4 )
59
+ # user system total real
60
+ # classx with attr_name = val 0.020000 0.010000 0.030000 ( 0.029100)
61
+ # classx with attr_name(val) 0.040000 0.000000 0.040000 ( 0.050599)
62
+ # normal class 0.000000 0.000000 0.000000 ( 0.002188)
63
+ # ----------------------------------------------------------
64
+ # result after 3e97a758
65
+ # user system total real
66
+ # classx with attr_name = val 0.020000 0.000000 0.020000 ( 0.026784)
67
+ # classx with attr_name(val) 0.030000 0.010000 0.040000 ( 0.051044)
68
+ # normal class 0.010000 0.000000 0.010000 ( 0.002661)
69
+ # ----------------------------------------------------------
70
+ # result after dd155598
71
+ # user system total real
72
+ # classx with attr_name = val 0.020000 0.000000 0.020000 ( 0.020638)
73
+ # classx with attr_name(val) 0.030000 0.000000 0.030000 ( 0.038159)
74
+ # normal class 0.000000 0.000000 0.000000 ( 0.002225)
75
+ # ----------------------------------------------------------
76
+ # result after 1f4c448b
77
+ # user system total real
78
+ # classx with attr_name = val 0.020000 0.010000 0.030000 ( 0.024688)
79
+ # normal class 0.000000 0.000000 0.000000 ( 0.001821)
80
+ # ----------------------------------------------------------
81
+ # result after a23be1ac
82
+ # user system total real
83
+ # classx with attr_name = val 0.040000 0.000000 0.040000 ( 0.038855)
84
+ # normal class 0.000000 0.000000 0.000000 ( 0.001833)
51
85
  # ----------------------------------------------------------
52
- # result after 283903a
53
- # user system total real
54
- # classx 0.810000 0.020000 0.830000 ( 0.902779)
55
- # normal class 0.000000 0.000000 0.000000 ( 0.001401)
86
+ # result after 458848f
87
+ # user system total real
88
+ # classx with attr_name = val 0.030000 0.010000 0.040000 ( 0.051419)
89
+ # normal class 0.000000 0.000000 0.000000 ( 0.007453)
56
90
  # ----------------------------------------------------------
@@ -0,0 +1,226 @@
1
+ require 'benchmark'
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
4
+ require 'classx'
5
+
6
+ include ClassX::Declare
7
+
8
+ def count_times_define &block
9
+ GC.disable
10
+ attr_name = 'a'
11
+ COUNT.times do
12
+ block.call(attr_name)
13
+ attr_name = attr_name.succ
14
+ end
15
+ GC.enable
16
+ end
17
+
18
+ COUNT = 1000
19
+ Benchmark.bm do |x|
20
+ x.report "attr_reader" do
21
+ class SimpleDefine
22
+ include ClassX
23
+
24
+ count_times_define do |name|
25
+ attr_reader name
26
+ end
27
+ end
28
+ end
29
+ x.report "simple define" do
30
+ class SimpleDefine
31
+ include ClassX
32
+
33
+ count_times_define do |name|
34
+ has name
35
+ end
36
+ end
37
+ end
38
+ x.report "with declare" do
39
+ classx "WithDeclare" do
40
+ count_times_define do |name|
41
+ has name
42
+ end
43
+ end
44
+ end
45
+ x.report "with writable" do
46
+ class WithWritable
47
+ include ClassX
48
+
49
+ count_times_define do |name|
50
+ has name, :writable => true
51
+ end
52
+ end
53
+ end
54
+
55
+ x.report "with optional" do
56
+ class WithOptional
57
+ include ClassX
58
+
59
+ count_times_define do |name|
60
+ has name, :optional => true
61
+ end
62
+ end
63
+ end
64
+
65
+ x.report "with default" do
66
+ class WithDefault
67
+ include ClassX
68
+
69
+ count_times_define do |name|
70
+ has name, :default => name
71
+ end
72
+ end
73
+ end
74
+
75
+ x.report "with default Proc" do
76
+ class WithDefaultProc
77
+ include ClassX
78
+
79
+ count_times_define do |name|
80
+ has name, :default => proc {|mine| name }
81
+ end
82
+ end
83
+ end
84
+
85
+ x.report "with default Proc lazy" do
86
+ class WithDefaultProcLazy
87
+ include ClassX
88
+
89
+ count_times_define do |name|
90
+ has name, :lazy => true, :default => proc {|mine| name }
91
+ end
92
+ end
93
+ end
94
+ x.report "with validate Proc" do
95
+ class WithValidateProc
96
+ include ClassX
97
+
98
+ count_times_define do |name|
99
+ has name, :validate => proc { true }
100
+ end
101
+ end
102
+ end
103
+
104
+ x.report "with validate Regexp" do
105
+ class WithValidateRegexp
106
+ include ClassX
107
+
108
+ count_times_define do |name|
109
+ has name, :validate => /hoge/
110
+ end
111
+ end
112
+ end
113
+
114
+ x.report "with handles Array" do
115
+ class WithHandlesArray
116
+ include ClassX
117
+
118
+ count_times_define do |name|
119
+ has name, :handles => [ "#{name}_foo", ]
120
+ end
121
+ end
122
+ end
123
+
124
+ x.report "with handles Hash" do
125
+ class WithHandlesHash
126
+ include ClassX
127
+
128
+ count_times_define do |name|
129
+ has name, :handles => { "#{name}_foo" => "foo", }
130
+ end
131
+ end
132
+ end
133
+ x.report "with include" do
134
+ class WithInclude
135
+ include ClassX
136
+
137
+ mod = Module.new
138
+ count_times_define do |name|
139
+ has name, :include => mod
140
+ end
141
+ end
142
+ end
143
+
144
+ x.report "with extend" do
145
+ class WithExtend
146
+ include ClassX
147
+
148
+ mod = Module.new
149
+ count_times_define do |name|
150
+ has name, :extend => mod
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ # On my environment( MacBook1.1 Intel Core Duo 1.83 GHz, 2GB), result is like that. TOOOOO SLOOOW classX!!!!.
157
+ #
158
+ # ----------------------------------------------------------
159
+ # result after 92ed088b ( before 0.0.4 )
160
+ # attr_reader 0.010000 0.000000 0.010000 ( 0.011373)
161
+ # simple define 0.190000 0.020000 0.210000 ( 0.245375)
162
+ # with declare 0.210000 0.020000 0.230000 ( 0.269984)
163
+ # with writable 0.170000 0.020000 0.190000 ( 0.198645)
164
+ # with optional 0.230000 0.020000 0.250000 ( 0.265170)
165
+ # with default 0.170000 0.010000 0.180000 ( 0.190290)
166
+ # with default Proc 0.240000 0.020000 0.260000 ( 0.271484)
167
+ # with default Proc lazy 0.180000 0.010000 0.190000 ( 0.204015)
168
+ # with validate Proc 0.290000 0.030000 0.320000 ( 0.317159)
169
+ # with validate Regexp 0.170000 0.010000 0.180000 ( 0.201919)
170
+ # with handles Array 0.330000 0.020000 0.350000 ( 0.352262)
171
+ # with handles Hash 0.210000 0.020000 0.230000 ( 0.233292)
172
+ # with include 0.320000 0.020000 0.340000 ( 0.353505)
173
+ # with extend 0.190000 0.010000 0.200000 ( 0.218557)
174
+ # ----------------------------------------------------------
175
+ # result after dd1bb608
176
+ # user system total real
177
+ # attr_reader 0.010000 0.000000 0.010000 ( 0.011491)
178
+ # simple define 0.190000 0.020000 0.210000 ( 0.244600)
179
+ # with declare 0.210000 0.020000 0.230000 ( 0.275477)
180
+ # with writable 0.160000 0.010000 0.170000 ( 0.182082)
181
+ # with optional 0.240000 0.020000 0.260000 ( 0.259744)
182
+ # with default 0.180000 0.020000 0.200000 ( 0.205924)
183
+ # with default Proc 0.250000 0.010000 0.260000 ( 0.281318)
184
+ # with default Proc lazy 0.170000 0.020000 0.190000 ( 0.193371)
185
+ # with validate Proc 0.270000 0.020000 0.290000 ( 0.327297)
186
+ # with validate Regexp 0.170000 0.010000 0.180000 ( 0.203348)
187
+ # with handles Array 0.300000 0.020000 0.320000 ( 0.343018)
188
+ # with handles Hash 0.200000 0.020000 0.220000 ( 0.227186)
189
+ # with include 0.320000 0.020000 0.340000 ( 0.345723)
190
+ # with extend 0.190000 0.010000 0.200000 ( 0.212512)
191
+ # ----------------------------------------------------------
192
+ # result after 29a8e329
193
+ # user system total real
194
+ # attr_reader 0.010000 0.010000 0.020000 ( 0.011874)
195
+ # simple define 0.200000 0.010000 0.210000 ( 0.239444)
196
+ # with declare 0.210000 0.020000 0.230000 ( 0.264705)
197
+ # with writable 0.180000 0.020000 0.200000 ( 0.210539)
198
+ # with optional 0.230000 0.010000 0.240000 ( 0.255122)
199
+ # with default 0.190000 0.020000 0.210000 ( 0.206571)
200
+ # with default Proc 0.240000 0.020000 0.260000 ( 0.263485)
201
+ # with default Proc lazy 0.200000 0.010000 0.210000 ( 0.224858)
202
+ # with validate Proc 0.300000 0.020000 0.320000 ( 0.309174)
203
+ # with validate Regexp 0.180000 0.010000 0.190000 ( 0.213703)
204
+ # with handles Array 0.340000 0.030000 0.370000 ( 0.364112)
205
+ # with handles Hash 0.200000 0.020000 0.220000 ( 0.227948)
206
+ # with include 0.340000 0.010000 0.350000 ( 0.357848)
207
+ # with extend 0.210000 0.020000 0.230000 ( 0.223762)
208
+ # ----------------------------------------------------------
209
+ # result after 1f4c448b
210
+ # user system total real
211
+ # user system total real
212
+ # attr_reader 0.010000 0.000000 0.010000 ( 0.010592)
213
+ # simple define 0.340000 0.060000 0.400000 ( 0.394536)
214
+ # with declare 0.380000 0.060000 0.440000 ( 0.457872)
215
+ # with writable 0.310000 0.050000 0.360000 ( 0.361601)
216
+ # with optional 0.410000 0.060000 0.470000 ( 0.482068)
217
+ # with default 0.290000 0.040000 0.330000 ( 0.347324)
218
+ # with default Proc 0.430000 0.060000 0.490000 ( 0.492673)
219
+ # with default Proc lazy 0.290000 0.050000 0.340000 ( 0.351080)
220
+ # with validate Proc 0.470000 0.060000 0.530000 ( 0.542845)
221
+ # with validate Regexp 0.280000 0.050000 0.330000 ( 0.342968)
222
+ # with handles Array 0.550000 0.060000 0.610000 ( 0.609591)
223
+ # with handles Hash 0.330000 0.050000 0.380000 ( 0.396480)
224
+ # with include 0.560000 0.050000 0.610000 ( 0.626158)
225
+ # with extend 0.310000 0.050000 0.360000 ( 0.379358)
226
+ # ----------------------------------------------------------
@@ -21,21 +21,39 @@ end
21
21
 
22
22
  COUNT = 1000
23
23
 
24
+ def do_bench klass
25
+ GC.disable
26
+ COUNT.times do
27
+ klass.new({ :x => rand(10), :y => rand(10), :z => rand(10) })
28
+ end
29
+ GC.enable
30
+ end
31
+
24
32
  Benchmark.bm do |x|
25
33
  x.report 'classx' do
26
- COUNT.times do
27
- PointWithClassX.new({ :x => rand(10), :y => rand(10), :z => rand(10) })
28
- end
34
+ do_bench PointWithClassX
29
35
  end
30
36
  x.report 'normal class' do
31
- COUNT.times do
32
- PointWithoutClassX.new({ :x => rand(10), :y => rand(10), :z => rand(10) })
33
- end
37
+ do_bench PointWithoutClassX
34
38
  end
35
39
  end
36
40
 
37
41
  # On my environment( MacBook1.1 Intel Core Duo 1.83 GHz, 2GB), result is like that. TOOOOO SLOOOW classX!!!!.
38
- #
42
+ #
43
+ # ----------------------------------------------------------
44
+ # result after 92ed088b ( before 0.0.4 )
45
+ # classx 0.060000 0.010000 0.070000 ( 0.083939)
46
+ # normal class 0.010000 0.000000 0.010000 ( 0.004305)
47
+ # ----------------------------------------------------------
48
+ # result after 1f4c448b
49
+ # user system total real
50
+ # classx 0.090000 0.010000 0.100000 ( 0.093254)
51
+ # normal class 0.000000 0.000000 0.000000 ( 0.004242)
52
+ # ----------------------------------------------------------
53
+ # result after a23be1ac
54
+ # user system total real
55
+ # classx 0.100000 0.010000 0.110000 ( 0.125652)
56
+ # normal class 0.000000 0.000000 0.000000 ( 0.004604)
39
57
  # ----------------------------------------------------------
40
58
  # result after 633f7e88
41
59
  # user system total real
@@ -148,7 +148,7 @@ table.report tr.dark {
148
148
  </script>
149
149
  </head>
150
150
  <body><h3>C0 code coverage information</h3>
151
- <p>Generated on Sat Aug 23 14:29:17 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
151
+ <p>Generated on Sat Sep 13 00:31:28 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
152
152
  </p>
153
153
  <hr/>
154
154
  <table class='report'><thead><tr><td class='heading'>Name</td>
@@ -159,24 +159,24 @@ table.report tr.dark {
159
159
  </tr>
160
160
  </thead>
161
161
  <tbody><tr class='light'><td>TOTAL</td>
162
- <td class='lines_total'><tt>3282</tt>
162
+ <td class='lines_total'><tt>1081</tt>
163
163
  </td>
164
- <td class='lines_code'><tt>1844</tt>
164
+ <td class='lines_code'><tt>700</tt>
165
165
  </td>
166
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>39.7%</tt>
166
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>92.2%</tt>
167
167
  &nbsp;</td>
168
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='40'/>
169
- <td class='uncovered' width='60'/>
168
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='92'/>
169
+ <td class='uncovered' width='8'/>
170
170
  </tr>
171
171
  </table>
172
172
  </td>
173
173
  </tr>
174
174
  </table>
175
175
  </td>
176
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>19.6%</tt>
176
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>88.7%</tt>
177
177
  &nbsp;</td>
178
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='20'/>
179
- <td class='uncovered' width='80'/>
178
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='89'/>
179
+ <td class='uncovered' width='11'/>
180
180
  </tr>
181
181
  </table>
182
182
  </td>
@@ -184,80 +184,26 @@ table.report tr.dark {
184
184
  </table>
185
185
  </td>
186
186
  </tr>
187
- <tr class='dark'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs.rb</a>
188
- </td>
189
- <td class='lines_total'><tt>1105</tt>
190
- </td>
191
- <td class='lines_code'><tt>553</tt>
192
- </td>
193
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>46.3%</tt>
194
- &nbsp;</td>
195
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='46'/>
196
- <td class='uncovered' width='54'/>
197
- </tr>
198
- </table>
199
- </td>
200
- </tr>
201
- </table>
202
- </td>
203
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>6.5%</tt>
204
- &nbsp;</td>
205
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='7'/>
206
- <td class='uncovered' width='93'/>
207
- </tr>
208
- </table>
209
- </td>
210
- </tr>
211
- </table>
212
- </td>
213
- </tr>
214
- <tr class='light'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/block.rb</a>
215
- </td>
216
- <td class='lines_total'><tt>51</tt>
217
- </td>
218
- <td class='lines_code'><tt>28</tt>
219
- </td>
220
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>52.9%</tt>
221
- &nbsp;</td>
222
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='53'/>
223
- <td class='uncovered' width='47'/>
224
- </tr>
225
- </table>
226
- </td>
227
- </tr>
228
- </table>
229
- </td>
230
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>17.9%</tt>
231
- &nbsp;</td>
232
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='18'/>
233
- <td class='uncovered' width='82'/>
234
- </tr>
235
- </table>
236
- </td>
237
- </tr>
238
- </table>
239
- </td>
240
- </tr>
241
- <tr class='dark'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/callbacks.rb</a>
187
+ <tr class='dark'><td><a href='lib-classx_rb.html'>lib/classx.rb</a>
242
188
  </td>
243
- <td class='lines_total'><tt>322</tt>
189
+ <td class='lines_total'><tt>205</tt>
244
190
  </td>
245
- <td class='lines_code'><tt>83</tt>
191
+ <td class='lines_code'><tt>130</tt>
246
192
  </td>
247
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>84.5%</tt>
193
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
248
194
  &nbsp;</td>
249
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='84'/>
250
- <td class='uncovered' width='16'/>
195
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
196
+ <td class='uncovered' width='0'/>
251
197
  </tr>
252
198
  </table>
253
199
  </td>
254
200
  </tr>
255
201
  </table>
256
202
  </td>
257
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>41.0%</tt>
203
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
258
204
  &nbsp;</td>
259
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='41'/>
260
- <td class='uncovered' width='59'/>
205
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
206
+ <td class='uncovered' width='0'/>
261
207
  </tr>
262
208
  </table>
263
209
  </td>
@@ -265,26 +211,26 @@ table.report tr.dark {
265
211
  </table>
266
212
  </td>
267
213
  </tr>
268
- <tr class='light'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/change.rb</a>
214
+ <tr class='light'><td><a href='lib-classx-attribute_rb.html'>lib/classx/attribute.rb</a>
269
215
  </td>
270
- <td class='lines_total'><tt>169</tt>
216
+ <td class='lines_total'><tt>286</tt>
271
217
  </td>
272
- <td class='lines_code'><tt>110</tt>
218
+ <td class='lines_code'><tt>221</tt>
273
219
  </td>
274
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>54.4%</tt>
220
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.6%</tt>
275
221
  &nbsp;</td>
276
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='54'/>
277
- <td class='uncovered' width='46'/>
222
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
223
+ <td class='uncovered' width='1'/>
278
224
  </tr>
279
225
  </table>
280
226
  </td>
281
227
  </tr>
282
228
  </table>
283
229
  </td>
284
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>31.8%</tt>
230
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>98.2%</tt>
285
231
  &nbsp;</td>
286
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='32'/>
287
- <td class='uncovered' width='68'/>
232
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='98'/>
233
+ <td class='uncovered' width='2'/>
288
234
  </tr>
289
235
  </table>
290
236
  </td>
@@ -292,26 +238,26 @@ table.report tr.dark {
292
238
  </table>
293
239
  </td>
294
240
  </tr>
295
- <tr class='dark'><td><a href='-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html'>/Library/Ruby/Gems/gems/diff-lcs-1.1.2/lib/diff/lcs/hunk.rb</a>
241
+ <tr class='dark'><td><a href='lib-classx-attributes_rb.html'>lib/classx/attributes.rb</a>
296
242
  </td>
297
- <td class='lines_total'><tt>257</tt>
243
+ <td class='lines_total'><tt>158</tt>
298
244
  </td>
299
- <td class='lines_code'><tt>170</tt>
245
+ <td class='lines_code'><tt>94</tt>
300
246
  </td>
301
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>25.3%</tt>
247
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
302
248
  &nbsp;</td>
303
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='25'/>
304
- <td class='uncovered' width='75'/>
249
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
250
+ <td class='uncovered' width='0'/>
305
251
  </tr>
306
252
  </table>
307
253
  </td>
308
254
  </tr>
309
255
  </table>
310
256
  </td>
311
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>11.8%</tt>
257
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
312
258
  &nbsp;</td>
313
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='12'/>
314
- <td class='uncovered' width='88'/>
259
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
260
+ <td class='uncovered' width='0'/>
315
261
  </tr>
316
262
  </table>
317
263
  </td>
@@ -319,26 +265,26 @@ table.report tr.dark {
319
265
  </table>
320
266
  </td>
321
267
  </tr>
322
- <tr class='light'><td><a href='-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html'>/Library/Ruby/Gems/gems/rcov-0.8.1.2.0/lib/rcov.rb</a>
268
+ <tr class='light'><td><a href='lib-classx-bracketable_rb.html'>lib/classx/bracketable.rb</a>
323
269
  </td>
324
- <td class='lines_total'><tt>988</tt>
270
+ <td class='lines_total'><tt>61</tt>
325
271
  </td>
326
- <td class='lines_code'><tt>602</tt>
272
+ <td class='lines_code'><tt>34</tt>
327
273
  </td>
328
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>3.3%</tt>
274
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
329
275
  &nbsp;</td>
330
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='3'/>
331
- <td class='uncovered' width='97'/>
276
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
277
+ <td class='uncovered' width='0'/>
332
278
  </tr>
333
279
  </table>
334
280
  </td>
335
281
  </tr>
336
282
  </table>
337
283
  </td>
338
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>2.8%</tt>
284
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
339
285
  &nbsp;</td>
340
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='3'/>
341
- <td class='uncovered' width='97'/>
286
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
287
+ <td class='uncovered' width='0'/>
342
288
  </tr>
343
289
  </table>
344
290
  </td>
@@ -346,26 +292,26 @@ table.report tr.dark {
346
292
  </table>
347
293
  </td>
348
294
  </tr>
349
- <tr class='dark'><td><a href='lib-classx_rb.html'>lib/classx.rb</a>
295
+ <tr class='dark'><td><a href='lib-classx-class_attributes_rb.html'>lib/classx/class_attributes.rb</a>
350
296
  </td>
351
- <td class='lines_total'><tt>75</tt>
297
+ <td class='lines_total'><tt>165</tt>
352
298
  </td>
353
- <td class='lines_code'><tt>58</tt>
299
+ <td class='lines_code'><tt>108</tt>
354
300
  </td>
355
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
301
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>95.2%</tt>
356
302
  &nbsp;</td>
357
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
358
- <td class='uncovered' width='0'/>
303
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='95'/>
304
+ <td class='uncovered' width='5'/>
359
305
  </tr>
360
306
  </table>
361
307
  </td>
362
308
  </tr>
363
309
  </table>
364
310
  </td>
365
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
311
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>92.6%</tt>
366
312
  &nbsp;</td>
367
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
368
- <td class='uncovered' width='0'/>
313
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='93'/>
314
+ <td class='uncovered' width='7'/>
369
315
  </tr>
370
316
  </table>
371
317
  </td>
@@ -373,26 +319,26 @@ table.report tr.dark {
373
319
  </table>
374
320
  </td>
375
321
  </tr>
376
- <tr class='light'><td><a href='lib-classx-attribute_rb.html'>lib/classx/attribute.rb</a>
322
+ <tr class='light'><td><a href='lib-classx-commandable_rb.html'>lib/classx/commandable.rb</a>
377
323
  </td>
378
- <td class='lines_total'><tt>185</tt>
324
+ <td class='lines_total'><tt>117</tt>
379
325
  </td>
380
- <td class='lines_code'><tt>149</tt>
326
+ <td class='lines_code'><tt>70</tt>
381
327
  </td>
382
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>53.0%</tt>
328
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>41.0%</tt>
383
329
  &nbsp;</td>
384
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='53'/>
385
- <td class='uncovered' width='47'/>
330
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='41'/>
331
+ <td class='uncovered' width='59'/>
386
332
  </tr>
387
333
  </table>
388
334
  </td>
389
335
  </tr>
390
336
  </table>
391
337
  </td>
392
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>45.6%</tt>
338
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>8.6%</tt>
393
339
  &nbsp;</td>
394
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='46'/>
395
- <td class='uncovered' width='54'/>
340
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='9'/>
341
+ <td class='uncovered' width='91'/>
396
342
  </tr>
397
343
  </table>
398
344
  </td>
@@ -400,26 +346,26 @@ table.report tr.dark {
400
346
  </table>
401
347
  </td>
402
348
  </tr>
403
- <tr class='dark'><td><a href='lib-classx-attributes_rb.html'>lib/classx/attributes.rb</a>
349
+ <tr class='dark'><td><a href='lib-classx-declare_rb.html'>lib/classx/declare.rb</a>
404
350
  </td>
405
- <td class='lines_total'><tt>92</tt>
351
+ <td class='lines_total'><tt>49</tt>
406
352
  </td>
407
- <td class='lines_code'><tt>76</tt>
353
+ <td class='lines_code'><tt>26</tt>
408
354
  </td>
409
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>97.8%</tt>
355
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>93.9%</tt>
410
356
  &nbsp;</td>
411
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='98'/>
412
- <td class='uncovered' width='2'/>
357
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='94'/>
358
+ <td class='uncovered' width='6'/>
413
359
  </tr>
414
360
  </table>
415
361
  </td>
416
362
  </tr>
417
363
  </table>
418
364
  </td>
419
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>97.4%</tt>
365
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>88.5%</tt>
420
366
  &nbsp;</td>
421
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='97'/>
422
- <td class='uncovered' width='3'/>
367
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='88'/>
368
+ <td class='uncovered' width='12'/>
423
369
  </tr>
424
370
  </table>
425
371
  </td>
@@ -429,9 +375,9 @@ table.report tr.dark {
429
375
  </tr>
430
376
  <tr class='light'><td><a href='lib-classx-validate_rb.html'>lib/classx/validate.rb</a>
431
377
  </td>
432
- <td class='lines_total'><tt>38</tt>
378
+ <td class='lines_total'><tt>40</tt>
433
379
  </td>
434
- <td class='lines_code'><tt>15</tt>
380
+ <td class='lines_code'><tt>17</tt>
435
381
  </td>
436
382
  <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
437
383
  &nbsp;</td>