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.
- data/ChangeLog +354 -0
- data/README +5 -0
- data/Rakefile +2 -2
- data/bench/attribute_get.rb +73 -0
- data/bench/attribute_set.rb +53 -19
- data/bench/define_attribute.rb +226 -0
- data/bench/initialize.rb +25 -7
- data/doc/output/coverage/index.html +74 -128
- data/doc/output/coverage/lib-classx-attribute_rb.html +291 -190
- data/doc/output/coverage/lib-classx-attributes_rb.html +167 -101
- data/doc/output/coverage/lib-classx-bracketable_rb.html +671 -0
- data/doc/output/coverage/lib-classx-class_attributes_rb.html +775 -0
- data/doc/output/coverage/lib-classx-commandable_rb.html +727 -0
- 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
- data/doc/output/coverage/lib-classx-validate_rb.html +43 -41
- data/doc/output/coverage/lib-classx_rb.html +208 -78
- data/example/commandable.rb +1 -0
- data/lib/classx.rb +146 -16
- data/lib/classx/attribute.rb +244 -143
- data/lib/classx/attributes.rb +93 -27
- data/lib/classx/bracketable.rb +61 -0
- data/lib/classx/class_attributes.rb +165 -0
- data/lib/classx/commandable.rb +55 -4
- data/lib/classx/declare.rb +40 -3
- data/lib/classx/role/logger.rb +17 -13
- data/lib/classx/validate.rb +26 -24
- data/spec/classx/handles_spec.rb +21 -6
- data/spec/classx/serialize_spec.rb +57 -0
- data/spec/classx/{with_coerce.rb → with_coerce_spec.rb} +0 -0
- data/spec/classx/with_extend_spec.rb +58 -0
- data/spec/classx/with_include_spec.rb +58 -0
- data/spec/classx/with_validate_spec.rb +363 -0
- data/spec/classx/without_anyoption_spec.rb +1 -1
- data/spec/classx/writable_option_spec.rb +29 -4
- data/spec/classx_bracketable_spec.rb +160 -0
- data/spec/classx_class_attributes/default_option_spec.rb +121 -0
- data/spec/classx_class_attributes/dsl_accessor_spec.rb +88 -0
- data/spec/classx_class_attributes/handles_spec.rb +77 -0
- data/spec/classx_class_attributes/with_coerce_spec.rb +119 -0
- data/spec/classx_class_attributes/with_extend_spec.rb +64 -0
- data/spec/classx_class_attributes/with_include_spec.rb +64 -0
- data/spec/classx_class_attributes/with_multiple_class_spec.rb +60 -0
- data/spec/classx_class_attributes/with_validate_spec.rb +248 -0
- data/spec/classx_class_attributes/without_accessor_spec.rb +19 -0
- data/spec/classx_class_attributes/without_anyoption_spec.rb +21 -0
- data/spec/classx_class_attributes/writable_option_spec.rb +100 -0
- data/spec/classx_declare_spec.rb +117 -0
- data/spec/classx_validate_spec.rb +1 -3
- data/tasks/basic_tasks.rake +1 -1
- metadata +36 -26
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +0 -932
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +0 -779
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +0 -867
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +0 -1715
- data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +0 -1598
- data/spec/classx/with_extend.rb +0 -27
- data/spec/classx/with_include.rb +0 -27
@@ -553,7 +553,7 @@ span.run100 {
|
|
553
553
|
</style>
|
554
554
|
</head>
|
555
555
|
<body><h3>C0 code coverage information</h3>
|
556
|
-
<p>Generated on Sat
|
556
|
+
<p>Generated on Sat Sep 13 00:31:29 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
|
557
557
|
</p>
|
558
558
|
<hr/>
|
559
559
|
<pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
@@ -571,24 +571,24 @@ span.run100 {
|
|
571
571
|
</thead>
|
572
572
|
<tbody><tr class='light'><td><a href='lib-classx-attributes_rb.html'>lib/classx/attributes.rb</a>
|
573
573
|
</td>
|
574
|
-
<td class='lines_total'><tt>
|
574
|
+
<td class='lines_total'><tt>158</tt>
|
575
575
|
</td>
|
576
|
-
<td class='lines_code'><tt>
|
576
|
+
<td class='lines_code'><tt>94</tt>
|
577
577
|
</td>
|
578
|
-
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>
|
578
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
|
579
579
|
</td>
|
580
|
-
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='
|
581
|
-
<td class='uncovered' width='
|
580
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
581
|
+
<td class='uncovered' width='0'/>
|
582
582
|
</tr>
|
583
583
|
</table>
|
584
584
|
</td>
|
585
585
|
</tr>
|
586
586
|
</table>
|
587
587
|
</td>
|
588
|
-
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>
|
588
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
|
589
589
|
</td>
|
590
|
-
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='
|
591
|
-
<td class='uncovered' width='
|
590
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
591
|
+
<td class='uncovered' width='0'/>
|
592
592
|
</tr>
|
593
593
|
</table>
|
594
594
|
</td>
|
@@ -598,98 +598,164 @@ span.run100 {
|
|
598
598
|
</tr>
|
599
599
|
</tbody>
|
600
600
|
</table>
|
601
|
-
<pre><span class="
|
602
|
-
</span><span class="
|
603
|
-
</span><span class="
|
604
|
-
</span><span class="
|
605
|
-
</span><span class="
|
606
|
-
</span><span class="
|
607
|
-
</span><span class="
|
608
|
-
</span><span class="
|
609
|
-
</span><span class="
|
610
|
-
</span><span class="
|
611
|
-
</span><span class="
|
612
|
-
</span><span class="
|
613
|
-
</span><span class="
|
614
|
-
</span><span class="
|
615
|
-
</span><span class="
|
616
|
-
</span><span class="
|
617
|
-
</span><span class="
|
618
|
-
</span><span class="
|
619
|
-
</span><span class="
|
620
|
-
</span><span class="
|
621
|
-
</span><span class="
|
622
|
-
</span><span class="
|
623
|
-
</span><span class="
|
624
|
-
</span><span class="
|
625
|
-
</span><span class="
|
626
|
-
</span><span class="
|
627
|
-
</span><span class="
|
628
|
-
</span><span class="
|
629
|
-
</span><span class="
|
630
|
-
</span><span class="
|
631
|
-
</span><span class="
|
632
|
-
</span><span class="
|
633
|
-
</span><span class="
|
634
|
-
</span><span class="
|
635
|
-
</span><span class="
|
636
|
-
</span><span class="
|
637
|
-
</span><span class="
|
638
|
-
</span><span class="
|
639
|
-
</span><span class="
|
640
|
-
</span><span class="
|
641
|
-
</span><span class="
|
642
|
-
</span><span class="
|
643
|
-
</span><span class="
|
644
|
-
</span><span class="
|
645
|
-
</span><span class="
|
646
|
-
</span><span class="
|
647
|
-
</span><span class="
|
648
|
-
</span><span class="
|
649
|
-
</span><span class="
|
650
|
-
</span><span class="
|
651
|
-
</span><span class="
|
652
|
-
</span><span class="
|
653
|
-
</span><span class="
|
654
|
-
</span><span class="
|
655
|
-
</span><span class="
|
656
|
-
</span><span class="
|
657
|
-
</span><span class="
|
658
|
-
</span><span class="
|
659
|
-
</span><span class="
|
660
|
-
</span><span class="
|
661
|
-
</span><span class="
|
662
|
-
</span><span class="
|
663
|
-
</span><span class="
|
664
|
-
</span><span class="
|
665
|
-
</span><span class="
|
666
|
-
</span><span class="
|
667
|
-
</span><span class="
|
668
|
-
</span><span class="
|
669
|
-
</span><span class="
|
670
|
-
</span><span class="
|
671
|
-
</span><span class="
|
672
|
-
</span><span class="
|
673
|
-
</span><span class="
|
674
|
-
</span><span class="
|
675
|
-
</span><span class="
|
676
|
-
</span><span class="
|
677
|
-
</span><span class="
|
678
|
-
</span><span class="
|
679
|
-
</span><span class="
|
680
|
-
</span><span class="
|
681
|
-
</span><span class="
|
682
|
-
</span><span class="
|
683
|
-
</span><span class="
|
684
|
-
</span><span class="
|
685
|
-
</span><span class="
|
686
|
-
</span><span class="
|
687
|
-
</span><span class="
|
688
|
-
</span><span class="
|
689
|
-
</span><span class="
|
690
|
-
</span><span class="
|
691
|
-
</span><span class="
|
692
|
-
</span><span class="
|
601
|
+
<pre><span class="marked0"><a name="line1"></a> 1 module ClassX
|
602
|
+
</span><span class="inferred1"><a name="line2"></a> 2 #
|
603
|
+
</span><span class="inferred0"><a name="line3"></a> 3 # added attribute feature to module.
|
604
|
+
</span><span class="inferred1"><a name="line4"></a> 4 #
|
605
|
+
</span><span class="inferred0"><a name="line5"></a> 5 # require 'classx'
|
606
|
+
</span><span class="inferred1"><a name="line6"></a> 6 # module YourApp::Role::SomeModule
|
607
|
+
</span><span class="inferred0"><a name="line7"></a> 7 # extend Attributes
|
608
|
+
</span><span class="inferred1"><a name="line8"></a> 8 #
|
609
|
+
</span><span class="inferred0"><a name="line9"></a> 9 # has :some_attr
|
610
|
+
</span><span class="inferred1"><a name="line10"></a> 10 #
|
611
|
+
</span><span class="inferred0"><a name="line11"></a> 11 # end
|
612
|
+
</span><span class="inferred1"><a name="line12"></a> 12 #
|
613
|
+
</span><span class="inferred0"><a name="line13"></a> 13 # class YourApp
|
614
|
+
</span><span class="inferred1"><a name="line14"></a> 14 # included ClassX
|
615
|
+
</span><span class="inferred0"><a name="line15"></a> 15 # included YourApp::Role::SomeModule
|
616
|
+
</span><span class="inferred1"><a name="line16"></a> 16 #
|
617
|
+
</span><span class="inferred0"><a name="line17"></a> 17 # end
|
618
|
+
</span><span class="inferred1"><a name="line18"></a> 18 #
|
619
|
+
</span><span class="inferred0"><a name="line19"></a> 19 # YourApp.new(:some_attr => 10)
|
620
|
+
</span><span class="inferred1"><a name="line20"></a> 20 #
|
621
|
+
</span><span class="marked0"><a name="line21"></a> 21 module Attributes
|
622
|
+
</span><span class="marked1"><a name="line22"></a> 22 ATTRIBUTE_REGEX = /\Aattribute_of:(\w+)\z/
|
623
|
+
</span><span class="inferred0"><a name="line23"></a> 23
|
624
|
+
</span><span class="inferred1"><a name="line24"></a> 24 # return Hash of attribute's name as a key and attribute's meta class as a value.
|
625
|
+
</span><span class="inferred0"><a name="line25"></a> 25 # for example,
|
626
|
+
</span><span class="inferred1"><a name="line26"></a> 26 #
|
627
|
+
</span><span class="inferred0"><a name="line27"></a> 27 # class YourClass
|
628
|
+
</span><span class="inferred1"><a name="line28"></a> 28 # include ClassX
|
629
|
+
</span><span class="inferred0"><a name="line29"></a> 29 # has :x
|
630
|
+
</span><span class="inferred1"><a name="line30"></a> 30 # end
|
631
|
+
</span><span class="inferred0"><a name="line31"></a> 31 #
|
632
|
+
</span><span class="inferred1"><a name="line32"></a> 32 # YourClass.attribute_of #=> { "x" => <ClassX::Attribute: ... > }
|
633
|
+
</span><span class="inferred0"><a name="line33"></a> 33 #
|
634
|
+
</span><span class="marked1"><a name="line34"></a> 34 def attribute_of
|
635
|
+
</span><span class="marked0"><a name="line35"></a> 35 unless instance_variable_defined?('@__attribute_of') && @__attribute_of
|
636
|
+
</span><span class="marked1"><a name="line36"></a> 36 @__attribute_of = {}
|
637
|
+
</span><span class="marked0"><a name="line37"></a> 37 private_instance_methods.select {|meth| meth.to_s =~ ATTRIBUTE_REGEX }.each do |meth|
|
638
|
+
</span><span class="marked1"><a name="line38"></a> 38 key = meth.to_s.sub(ATTRIBUTE_REGEX) { $1 }
|
639
|
+
</span><span class="marked0"><a name="line39"></a> 39 @__attribute_of[key] = __send__ "attribute_of:#{key}"
|
640
|
+
</span><span class="inferred1"><a name="line40"></a> 40 end
|
641
|
+
</span><span class="inferred0"><a name="line41"></a> 41 end
|
642
|
+
</span><span class="inferred1"><a name="line42"></a> 42
|
643
|
+
</span><span class="marked0"><a name="line43"></a> 43 @__attribute_of
|
644
|
+
</span><span class="inferred1"><a name="line44"></a> 44 end
|
645
|
+
</span><span class="inferred0"><a name="line45"></a> 45
|
646
|
+
</span><span class="marked1"><a name="line46"></a> 46 private
|
647
|
+
</span><span class="inferred0"><a name="line47"></a> 47 # generating attribute's meta class and bind to this class.
|
648
|
+
</span><span class="inferred1"><a name="line48"></a> 48 #
|
649
|
+
</span><span class="marked0"><a name="line49"></a> 49 def define_attribute name, attribute #:doc:
|
650
|
+
</span><span class="marked1"><a name="line50"></a> 50 klass_attribute = ClassX::AttributeFactory.create(attribute)
|
651
|
+
</span><span class="marked0"><a name="line51"></a> 51 mod = nil
|
652
|
+
</span><span class="marked1"><a name="line52"></a> 52 if self.const_defined? 'ClassMethods'
|
653
|
+
</span><span class="marked0"><a name="line53"></a> 53 mod = self.const_get('ClassMethods')
|
654
|
+
</span><span class="inferred1"><a name="line54"></a> 54 else
|
655
|
+
</span><span class="marked0"><a name="line55"></a> 55 mod = Module.new
|
656
|
+
</span><span class="marked1"><a name="line56"></a> 56 const_set('ClassMethods', mod)
|
657
|
+
</span><span class="inferred0"><a name="line57"></a> 57 end
|
658
|
+
</span><span class="marked1"><a name="line58"></a> 58 mod.module_eval do
|
659
|
+
</span><span class="marked0"><a name="line59"></a> 59 define_method "attribute_of:#{name}" do
|
660
|
+
</span><span class="marked1"><a name="line60"></a> 60 klass_attribute
|
661
|
+
</span><span class="inferred0"><a name="line61"></a> 61 end
|
662
|
+
</span><span class="inferred1"><a name="line62"></a> 62
|
663
|
+
</span><span class="marked0"><a name="line63"></a> 63 private "attribute_of:#{name}"
|
664
|
+
</span><span class="inferred1"><a name="line64"></a> 64 end
|
665
|
+
</span><span class="marked0"><a name="line65"></a> 65 self.extend(mod)
|
666
|
+
</span><span class="marked1"><a name="line66"></a> 66 @__attribute_of ||= self.attribute_of
|
667
|
+
</span><span class="marked0"><a name="line67"></a> 67 @__attribute_of[name] = klass_attribute
|
668
|
+
</span><span class="inferred1"><a name="line68"></a> 68
|
669
|
+
</span><span class="marked0"><a name="line69"></a> 69 define_method "attribute_of:#{name}" do
|
670
|
+
</span><span class="marked1"><a name="line70"></a> 70 @__attribute_of ||= {}
|
671
|
+
</span><span class="marked0"><a name="line71"></a> 71 @__attribute_of[name] ||= klass_attribute.new(self)
|
672
|
+
</span><span class="inferred1"><a name="line72"></a> 72 end
|
673
|
+
</span><span class="inferred0"><a name="line73"></a> 73
|
674
|
+
</span><span class="marked1"><a name="line74"></a> 74 private "attribute_of:#{name}"
|
675
|
+
</span><span class="inferred0"><a name="line75"></a> 75
|
676
|
+
</span><span class="marked1"><a name="line76"></a> 76 klass_attribute
|
677
|
+
</span><span class="inferred0"><a name="line77"></a> 77 end
|
678
|
+
</span><span class="inferred1"><a name="line78"></a> 78
|
679
|
+
</span><span class="inferred0"><a name="line79"></a> 79 # adding new attribute to class, and define accessor methods related to this attribute.
|
680
|
+
</span><span class="inferred1"><a name="line80"></a> 80 # You can also use +has+ more declaretivly.
|
681
|
+
</span><span class="inferred0"><a name="line81"></a> 81 #
|
682
|
+
</span><span class="inferred1"><a name="line82"></a> 82 # class YourClass
|
683
|
+
</span><span class="inferred0"><a name="line83"></a> 83 # include ClassX
|
684
|
+
</span><span class="inferred1"><a name="line84"></a> 84 # add_attribute :x,
|
685
|
+
</span><span class="inferred0"><a name="line85"></a> 85 # :writable => true, # defining accessor scope.
|
686
|
+
</span><span class="inferred1"><a name="line86"></a> 86 # :optional => ture, # defining attribute is required in initialize.
|
687
|
+
</span><span class="inferred0"><a name="line87"></a> 87 # :validate => proc {|val| val.respond_to? :to_s } # this attribute's value should adopted to this rule.
|
688
|
+
</span><span class="inferred1"><a name="line88"></a> 88 # :default => proc {|mine| mine.class.to_s.split(/::/).last.downcase } # default value for this attribute.
|
689
|
+
</span><span class="inferred0"><a name="line89"></a> 89 #
|
690
|
+
</span><span class="inferred1"><a name="line90"></a> 90 # end
|
691
|
+
</span><span class="inferred0"><a name="line91"></a> 91 #
|
692
|
+
</span><span class="marked1"><a name="line92"></a> 92 def add_attribute name, attrs={} #:doc:
|
693
|
+
</span><span class="marked0"><a name="line93"></a> 93 name = name.to_s
|
694
|
+
</span><span class="inferred1"><a name="line94"></a> 94
|
695
|
+
</span><span class="marked0"><a name="line95"></a> 95 attr_class = define_attribute(name, attrs)
|
696
|
+
</span><span class="inferred1"><a name="line96"></a> 96
|
697
|
+
</span><span class="inferred0"><a name="line97"></a> 97 # XXX: Why this can take *args?
|
698
|
+
</span><span class="inferred1"><a name="line98"></a> 98 # => It's for avoid warnings when you call it without values.
|
699
|
+
</span><span class="marked0"><a name="line99"></a> 99 define_method name do |*vals|
|
700
|
+
</span><span class="marked1"><a name="line100"></a>100 if vals == []
|
701
|
+
</span><span class="marked0"><a name="line101"></a>101 @__attribute_data_of ||= {}
|
702
|
+
</span><span class="marked1"><a name="line102"></a>102 if @__attribute_data_of[name]
|
703
|
+
</span><span class="marked0"><a name="line103"></a>103 return @__attribute_data_of[name]
|
704
|
+
</span><span class="inferred1"><a name="line104"></a>104 else
|
705
|
+
</span><span class="marked0"><a name="line105"></a>105 attr_instance = __send__ "attribute_of:#{name}"
|
706
|
+
</span><span class="marked1"><a name="line106"></a>106 return @__attribute_data_of[name] = attr_instance.get
|
707
|
+
</span><span class="inferred0"><a name="line107"></a>107 end
|
708
|
+
</span><span class="inferred1"><a name="line108"></a>108 else
|
709
|
+
</span><span class="marked0"><a name="line109"></a>109 raise ArgumentError if vals.size > 1
|
710
|
+
</span><span class="marked1"><a name="line110"></a>110 val = vals.first
|
711
|
+
</span><span class="marked0"><a name="line111"></a>111 if respond_to? "#{name}="
|
712
|
+
</span><span class="marked1"><a name="line112"></a>112 __send__ "#{name}=", val
|
713
|
+
</span><span class="inferred0"><a name="line113"></a>113 else
|
714
|
+
</span><span class="marked1"><a name="line114"></a>114 raise RuntimeError, ":#{name} is not writable"
|
715
|
+
</span><span class="inferred0"><a name="line115"></a>115 end
|
716
|
+
</span><span class="inferred1"><a name="line116"></a>116 end
|
717
|
+
</span><span class="inferred0"><a name="line117"></a>117 end
|
718
|
+
</span><span class="inferred1"><a name="line118"></a>118
|
719
|
+
</span><span class="marked0"><a name="line119"></a>119 define_method "#{name}=" do |val|
|
720
|
+
</span><span class="marked1"><a name="line120"></a>120 attr_instance = __send__ "attribute_of:#{name}"
|
721
|
+
</span><span class="marked0"><a name="line121"></a>121 attr_instance.set val
|
722
|
+
</span><span class="marked1"><a name="line122"></a>122 @__attribute_data_of ||= {}
|
723
|
+
</span><span class="marked0"><a name="line123"></a>123 @__attribute_data_of[name] = val
|
724
|
+
</span><span class="inferred1"><a name="line124"></a>124 end
|
725
|
+
</span><span class="inferred0"><a name="line125"></a>125
|
726
|
+
</span><span class="marked1"><a name="line126"></a>126 unless attr_class.config[:writable]
|
727
|
+
</span><span class="marked0"><a name="line127"></a>127 private "#{name}="
|
728
|
+
</span><span class="inferred1"><a name="line128"></a>128 end
|
729
|
+
</span><span class="inferred0"><a name="line129"></a>129
|
730
|
+
</span><span class="marked1"><a name="line130"></a>130 if attr_class.config[:handles]
|
731
|
+
</span><span class="marked0"><a name="line131"></a>131 case attr_class.config[:handles]
|
732
|
+
</span><span class="marked1"><a name="line132"></a>132 when Hash
|
733
|
+
</span><span class="marked0"><a name="line133"></a>133 attr_class.config[:handles].each do |before, after|
|
734
|
+
</span><span class="marked1"><a name="line134"></a>134 define_method before do |*args|
|
735
|
+
</span><span class="marked0"><a name="line135"></a>135 __send__("#{name}").__send__ after, *args
|
736
|
+
</span><span class="inferred1"><a name="line136"></a>136 end
|
737
|
+
</span><span class="inferred0"><a name="line137"></a>137 end
|
738
|
+
</span><span class="marked1"><a name="line138"></a>138 when Array
|
739
|
+
</span><span class="marked0"><a name="line139"></a>139 attr_class.config[:handles].each do |meth|
|
740
|
+
</span><span class="marked1"><a name="line140"></a>140 define_method meth do |*args|
|
741
|
+
</span><span class="marked0"><a name="line141"></a>141 __send__("#{name}").__send__ meth, *args
|
742
|
+
</span><span class="inferred1"><a name="line142"></a>142 end
|
743
|
+
</span><span class="inferred0"><a name="line143"></a>143 end
|
744
|
+
</span><span class="inferred1"><a name="line144"></a>144 end
|
745
|
+
</span><span class="inferred0"><a name="line145"></a>145 end
|
746
|
+
</span><span class="inferred1"><a name="line146"></a>146 end
|
747
|
+
</span><span class="inferred0"><a name="line147"></a>147
|
748
|
+
</span><span class="marked1"><a name="line148"></a>148 alias has add_attribute
|
749
|
+
</span><span class="inferred0"><a name="line149"></a>149
|
750
|
+
</span><span class="inferred1"><a name="line150"></a>150 # hook for module to ClassX base class.
|
751
|
+
</span><span class="marked0"><a name="line151"></a>151 def included klass
|
752
|
+
</span><span class="marked1"><a name="line152"></a>152 klass.extend(self.const_get('ClassMethods'))
|
753
|
+
</span><span class="marked0"><a name="line153"></a>153 end
|
754
|
+
</span><span class="inferred1"><a name="line154"></a>154
|
755
|
+
</span><span class="inferred0"><a name="line155"></a>155 # alias for lazy people
|
756
|
+
</span><span class="marked1"><a name="line156"></a>156 Attrs = Attributes
|
757
|
+
</span><span class="inferred0"><a name="line157"></a>157 end
|
758
|
+
</span><span class="inferred1"><a name="line158"></a>158 end
|
693
759
|
</span></pre><hr/>
|
694
760
|
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
695
761
|
version 0.8.1.2.</p>
|
@@ -0,0 +1,671 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>lib/classx/bracketable.rb - C0 code coverage information</title>
|
3
|
+
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
4
|
+
<style type='text/css'>span.cross-ref-title {
|
5
|
+
font-size: 140%;
|
6
|
+
}
|
7
|
+
span.cross-ref a {
|
8
|
+
text-decoration: none;
|
9
|
+
}
|
10
|
+
span.cross-ref {
|
11
|
+
background-color:#f3f7fa;
|
12
|
+
border: 1px dashed #333;
|
13
|
+
margin: 1em;
|
14
|
+
padding: 0.5em;
|
15
|
+
overflow: hidden;
|
16
|
+
}
|
17
|
+
a.crossref-toggle {
|
18
|
+
text-decoration: none;
|
19
|
+
}
|
20
|
+
span.marked0 {
|
21
|
+
background-color: rgb(185, 210, 200);
|
22
|
+
display: block;
|
23
|
+
}
|
24
|
+
span.marked1 {
|
25
|
+
background-color: rgb(190, 215, 205);
|
26
|
+
display: block;
|
27
|
+
}
|
28
|
+
span.inferred0 {
|
29
|
+
background-color: rgb(175, 200, 200);
|
30
|
+
display: block;
|
31
|
+
}
|
32
|
+
span.inferred1 {
|
33
|
+
background-color: rgb(180, 205, 205);
|
34
|
+
display: block;
|
35
|
+
}
|
36
|
+
span.uncovered0 {
|
37
|
+
background-color: rgb(225, 110, 110);
|
38
|
+
display: block;
|
39
|
+
}
|
40
|
+
span.uncovered1 {
|
41
|
+
background-color: rgb(235, 120, 120);
|
42
|
+
display: block;
|
43
|
+
}
|
44
|
+
span.overview {
|
45
|
+
border-bottom: 8px solid black;
|
46
|
+
}
|
47
|
+
div.overview {
|
48
|
+
border-bottom: 8px solid black;
|
49
|
+
}
|
50
|
+
body {
|
51
|
+
font-family: verdana, arial, helvetica;
|
52
|
+
}
|
53
|
+
div.footer {
|
54
|
+
font-size: 68%;
|
55
|
+
margin-top: 1.5em;
|
56
|
+
}
|
57
|
+
h1, h2, h3, h4, h5, h6 {
|
58
|
+
margin-bottom: 0.5em;
|
59
|
+
}
|
60
|
+
h5 {
|
61
|
+
margin-top: 0.5em;
|
62
|
+
}
|
63
|
+
.hidden {
|
64
|
+
display: none;
|
65
|
+
}
|
66
|
+
div.separator {
|
67
|
+
height: 10px;
|
68
|
+
}
|
69
|
+
/* Commented out for better readability, esp. on IE */
|
70
|
+
/*
|
71
|
+
table tr td, table tr th {
|
72
|
+
font-size: 68%;
|
73
|
+
}
|
74
|
+
td.value table tr td {
|
75
|
+
font-size: 11px;
|
76
|
+
}
|
77
|
+
*/
|
78
|
+
table.percent_graph {
|
79
|
+
height: 12px;
|
80
|
+
border: #808080 1px solid;
|
81
|
+
empty-cells: show;
|
82
|
+
}
|
83
|
+
table.percent_graph td.covered {
|
84
|
+
height: 10px;
|
85
|
+
background: #00f000;
|
86
|
+
}
|
87
|
+
table.percent_graph td.uncovered {
|
88
|
+
height: 10px;
|
89
|
+
background: #e00000;
|
90
|
+
}
|
91
|
+
table.percent_graph td.NA {
|
92
|
+
height: 10px;
|
93
|
+
background: #eaeaea;
|
94
|
+
}
|
95
|
+
table.report {
|
96
|
+
border-collapse: collapse;
|
97
|
+
width: 100%;
|
98
|
+
}
|
99
|
+
table.report td.heading {
|
100
|
+
background: #dcecff;
|
101
|
+
border: #d0d0d0 1px solid;
|
102
|
+
font-weight: bold;
|
103
|
+
text-align: center;
|
104
|
+
}
|
105
|
+
table.report td.heading:hover {
|
106
|
+
background: #c0ffc0;
|
107
|
+
}
|
108
|
+
table.report td.text {
|
109
|
+
border: #d0d0d0 1px solid;
|
110
|
+
}
|
111
|
+
table.report td.value,
|
112
|
+
table.report td.lines_total,
|
113
|
+
table.report td.lines_code {
|
114
|
+
text-align: right;
|
115
|
+
border: #d0d0d0 1px solid;
|
116
|
+
}
|
117
|
+
table.report tr.light {
|
118
|
+
background-color: rgb(240, 240, 245);
|
119
|
+
}
|
120
|
+
table.report tr.dark {
|
121
|
+
background-color: rgb(230, 230, 235);
|
122
|
+
}
|
123
|
+
</style>
|
124
|
+
<script type='text/javascript'>
|
125
|
+
// <![CDATA[
|
126
|
+
function toggleCode( id ) {
|
127
|
+
if ( document.getElementById )
|
128
|
+
elem = document.getElementById( id );
|
129
|
+
else if ( document.all )
|
130
|
+
elem = eval( "document.all." + id );
|
131
|
+
else
|
132
|
+
return false;
|
133
|
+
|
134
|
+
elemStyle = elem.style;
|
135
|
+
|
136
|
+
if ( elemStyle.display != "block" ) {
|
137
|
+
elemStyle.display = "block"
|
138
|
+
} else {
|
139
|
+
elemStyle.display = "none"
|
140
|
+
}
|
141
|
+
|
142
|
+
return true;
|
143
|
+
}
|
144
|
+
|
145
|
+
// Make cross-references hidden by default
|
146
|
+
document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
|
147
|
+
// ]]>
|
148
|
+
</script>
|
149
|
+
<style type='text/css'>span.run0 {
|
150
|
+
background-color: rgb(178, 204, 255);
|
151
|
+
display: block;
|
152
|
+
}
|
153
|
+
span.run1 {
|
154
|
+
background-color: rgb(178, 206, 255);
|
155
|
+
display: block;
|
156
|
+
}
|
157
|
+
span.run2 {
|
158
|
+
background-color: rgb(178, 209, 255);
|
159
|
+
display: block;
|
160
|
+
}
|
161
|
+
span.run3 {
|
162
|
+
background-color: rgb(178, 211, 255);
|
163
|
+
display: block;
|
164
|
+
}
|
165
|
+
span.run4 {
|
166
|
+
background-color: rgb(178, 214, 255);
|
167
|
+
display: block;
|
168
|
+
}
|
169
|
+
span.run5 {
|
170
|
+
background-color: rgb(178, 218, 255);
|
171
|
+
display: block;
|
172
|
+
}
|
173
|
+
span.run6 {
|
174
|
+
background-color: rgb(178, 220, 255);
|
175
|
+
display: block;
|
176
|
+
}
|
177
|
+
span.run7 {
|
178
|
+
background-color: rgb(178, 223, 255);
|
179
|
+
display: block;
|
180
|
+
}
|
181
|
+
span.run8 {
|
182
|
+
background-color: rgb(178, 225, 255);
|
183
|
+
display: block;
|
184
|
+
}
|
185
|
+
span.run9 {
|
186
|
+
background-color: rgb(178, 228, 255);
|
187
|
+
display: block;
|
188
|
+
}
|
189
|
+
span.run10 {
|
190
|
+
background-color: rgb(178, 232, 255);
|
191
|
+
display: block;
|
192
|
+
}
|
193
|
+
span.run11 {
|
194
|
+
background-color: rgb(178, 234, 255);
|
195
|
+
display: block;
|
196
|
+
}
|
197
|
+
span.run12 {
|
198
|
+
background-color: rgb(178, 237, 255);
|
199
|
+
display: block;
|
200
|
+
}
|
201
|
+
span.run13 {
|
202
|
+
background-color: rgb(178, 239, 255);
|
203
|
+
display: block;
|
204
|
+
}
|
205
|
+
span.run14 {
|
206
|
+
background-color: rgb(178, 242, 255);
|
207
|
+
display: block;
|
208
|
+
}
|
209
|
+
span.run15 {
|
210
|
+
background-color: rgb(178, 246, 255);
|
211
|
+
display: block;
|
212
|
+
}
|
213
|
+
span.run16 {
|
214
|
+
background-color: rgb(178, 248, 255);
|
215
|
+
display: block;
|
216
|
+
}
|
217
|
+
span.run17 {
|
218
|
+
background-color: rgb(178, 251, 255);
|
219
|
+
display: block;
|
220
|
+
}
|
221
|
+
span.run18 {
|
222
|
+
background-color: rgb(178, 253, 255);
|
223
|
+
display: block;
|
224
|
+
}
|
225
|
+
span.run19 {
|
226
|
+
background-color: rgb(178, 255, 253);
|
227
|
+
display: block;
|
228
|
+
}
|
229
|
+
span.run20 {
|
230
|
+
background-color: rgb(178, 255, 249);
|
231
|
+
display: block;
|
232
|
+
}
|
233
|
+
span.run21 {
|
234
|
+
background-color: rgb(178, 255, 247);
|
235
|
+
display: block;
|
236
|
+
}
|
237
|
+
span.run22 {
|
238
|
+
background-color: rgb(178, 255, 244);
|
239
|
+
display: block;
|
240
|
+
}
|
241
|
+
span.run23 {
|
242
|
+
background-color: rgb(178, 255, 242);
|
243
|
+
display: block;
|
244
|
+
}
|
245
|
+
span.run24 {
|
246
|
+
background-color: rgb(178, 255, 239);
|
247
|
+
display: block;
|
248
|
+
}
|
249
|
+
span.run25 {
|
250
|
+
background-color: rgb(178, 255, 235);
|
251
|
+
display: block;
|
252
|
+
}
|
253
|
+
span.run26 {
|
254
|
+
background-color: rgb(178, 255, 233);
|
255
|
+
display: block;
|
256
|
+
}
|
257
|
+
span.run27 {
|
258
|
+
background-color: rgb(178, 255, 230);
|
259
|
+
display: block;
|
260
|
+
}
|
261
|
+
span.run28 {
|
262
|
+
background-color: rgb(178, 255, 228);
|
263
|
+
display: block;
|
264
|
+
}
|
265
|
+
span.run29 {
|
266
|
+
background-color: rgb(178, 255, 225);
|
267
|
+
display: block;
|
268
|
+
}
|
269
|
+
span.run30 {
|
270
|
+
background-color: rgb(178, 255, 221);
|
271
|
+
display: block;
|
272
|
+
}
|
273
|
+
span.run31 {
|
274
|
+
background-color: rgb(178, 255, 219);
|
275
|
+
display: block;
|
276
|
+
}
|
277
|
+
span.run32 {
|
278
|
+
background-color: rgb(178, 255, 216);
|
279
|
+
display: block;
|
280
|
+
}
|
281
|
+
span.run33 {
|
282
|
+
background-color: rgb(178, 255, 214);
|
283
|
+
display: block;
|
284
|
+
}
|
285
|
+
span.run34 {
|
286
|
+
background-color: rgb(178, 255, 211);
|
287
|
+
display: block;
|
288
|
+
}
|
289
|
+
span.run35 {
|
290
|
+
background-color: rgb(178, 255, 207);
|
291
|
+
display: block;
|
292
|
+
}
|
293
|
+
span.run36 {
|
294
|
+
background-color: rgb(178, 255, 205);
|
295
|
+
display: block;
|
296
|
+
}
|
297
|
+
span.run37 {
|
298
|
+
background-color: rgb(178, 255, 202);
|
299
|
+
display: block;
|
300
|
+
}
|
301
|
+
span.run38 {
|
302
|
+
background-color: rgb(178, 255, 200);
|
303
|
+
display: block;
|
304
|
+
}
|
305
|
+
span.run39 {
|
306
|
+
background-color: rgb(178, 255, 197);
|
307
|
+
display: block;
|
308
|
+
}
|
309
|
+
span.run40 {
|
310
|
+
background-color: rgb(178, 255, 193);
|
311
|
+
display: block;
|
312
|
+
}
|
313
|
+
span.run41 {
|
314
|
+
background-color: rgb(178, 255, 191);
|
315
|
+
display: block;
|
316
|
+
}
|
317
|
+
span.run42 {
|
318
|
+
background-color: rgb(178, 255, 188);
|
319
|
+
display: block;
|
320
|
+
}
|
321
|
+
span.run43 {
|
322
|
+
background-color: rgb(178, 255, 186);
|
323
|
+
display: block;
|
324
|
+
}
|
325
|
+
span.run44 {
|
326
|
+
background-color: rgb(178, 255, 183);
|
327
|
+
display: block;
|
328
|
+
}
|
329
|
+
span.run45 {
|
330
|
+
background-color: rgb(178, 255, 179);
|
331
|
+
display: block;
|
332
|
+
}
|
333
|
+
span.run46 {
|
334
|
+
background-color: rgb(179, 255, 178);
|
335
|
+
display: block;
|
336
|
+
}
|
337
|
+
span.run47 {
|
338
|
+
background-color: rgb(182, 255, 178);
|
339
|
+
display: block;
|
340
|
+
}
|
341
|
+
span.run48 {
|
342
|
+
background-color: rgb(184, 255, 178);
|
343
|
+
display: block;
|
344
|
+
}
|
345
|
+
span.run49 {
|
346
|
+
background-color: rgb(187, 255, 178);
|
347
|
+
display: block;
|
348
|
+
}
|
349
|
+
span.run50 {
|
350
|
+
background-color: rgb(191, 255, 178);
|
351
|
+
display: block;
|
352
|
+
}
|
353
|
+
span.run51 {
|
354
|
+
background-color: rgb(193, 255, 178);
|
355
|
+
display: block;
|
356
|
+
}
|
357
|
+
span.run52 {
|
358
|
+
background-color: rgb(196, 255, 178);
|
359
|
+
display: block;
|
360
|
+
}
|
361
|
+
span.run53 {
|
362
|
+
background-color: rgb(198, 255, 178);
|
363
|
+
display: block;
|
364
|
+
}
|
365
|
+
span.run54 {
|
366
|
+
background-color: rgb(201, 255, 178);
|
367
|
+
display: block;
|
368
|
+
}
|
369
|
+
span.run55 {
|
370
|
+
background-color: rgb(205, 255, 178);
|
371
|
+
display: block;
|
372
|
+
}
|
373
|
+
span.run56 {
|
374
|
+
background-color: rgb(207, 255, 178);
|
375
|
+
display: block;
|
376
|
+
}
|
377
|
+
span.run57 {
|
378
|
+
background-color: rgb(210, 255, 178);
|
379
|
+
display: block;
|
380
|
+
}
|
381
|
+
span.run58 {
|
382
|
+
background-color: rgb(212, 255, 178);
|
383
|
+
display: block;
|
384
|
+
}
|
385
|
+
span.run59 {
|
386
|
+
background-color: rgb(215, 255, 178);
|
387
|
+
display: block;
|
388
|
+
}
|
389
|
+
span.run60 {
|
390
|
+
background-color: rgb(219, 255, 178);
|
391
|
+
display: block;
|
392
|
+
}
|
393
|
+
span.run61 {
|
394
|
+
background-color: rgb(221, 255, 178);
|
395
|
+
display: block;
|
396
|
+
}
|
397
|
+
span.run62 {
|
398
|
+
background-color: rgb(224, 255, 178);
|
399
|
+
display: block;
|
400
|
+
}
|
401
|
+
span.run63 {
|
402
|
+
background-color: rgb(226, 255, 178);
|
403
|
+
display: block;
|
404
|
+
}
|
405
|
+
span.run64 {
|
406
|
+
background-color: rgb(229, 255, 178);
|
407
|
+
display: block;
|
408
|
+
}
|
409
|
+
span.run65 {
|
410
|
+
background-color: rgb(233, 255, 178);
|
411
|
+
display: block;
|
412
|
+
}
|
413
|
+
span.run66 {
|
414
|
+
background-color: rgb(235, 255, 178);
|
415
|
+
display: block;
|
416
|
+
}
|
417
|
+
span.run67 {
|
418
|
+
background-color: rgb(238, 255, 178);
|
419
|
+
display: block;
|
420
|
+
}
|
421
|
+
span.run68 {
|
422
|
+
background-color: rgb(240, 255, 178);
|
423
|
+
display: block;
|
424
|
+
}
|
425
|
+
span.run69 {
|
426
|
+
background-color: rgb(243, 255, 178);
|
427
|
+
display: block;
|
428
|
+
}
|
429
|
+
span.run70 {
|
430
|
+
background-color: rgb(247, 255, 178);
|
431
|
+
display: block;
|
432
|
+
}
|
433
|
+
span.run71 {
|
434
|
+
background-color: rgb(249, 255, 178);
|
435
|
+
display: block;
|
436
|
+
}
|
437
|
+
span.run72 {
|
438
|
+
background-color: rgb(252, 255, 178);
|
439
|
+
display: block;
|
440
|
+
}
|
441
|
+
span.run73 {
|
442
|
+
background-color: rgb(255, 255, 178);
|
443
|
+
display: block;
|
444
|
+
}
|
445
|
+
span.run74 {
|
446
|
+
background-color: rgb(255, 252, 178);
|
447
|
+
display: block;
|
448
|
+
}
|
449
|
+
span.run75 {
|
450
|
+
background-color: rgb(255, 248, 178);
|
451
|
+
display: block;
|
452
|
+
}
|
453
|
+
span.run76 {
|
454
|
+
background-color: rgb(255, 246, 178);
|
455
|
+
display: block;
|
456
|
+
}
|
457
|
+
span.run77 {
|
458
|
+
background-color: rgb(255, 243, 178);
|
459
|
+
display: block;
|
460
|
+
}
|
461
|
+
span.run78 {
|
462
|
+
background-color: rgb(255, 240, 178);
|
463
|
+
display: block;
|
464
|
+
}
|
465
|
+
span.run79 {
|
466
|
+
background-color: rgb(255, 238, 178);
|
467
|
+
display: block;
|
468
|
+
}
|
469
|
+
span.run80 {
|
470
|
+
background-color: rgb(255, 234, 178);
|
471
|
+
display: block;
|
472
|
+
}
|
473
|
+
span.run81 {
|
474
|
+
background-color: rgb(255, 232, 178);
|
475
|
+
display: block;
|
476
|
+
}
|
477
|
+
span.run82 {
|
478
|
+
background-color: rgb(255, 229, 178);
|
479
|
+
display: block;
|
480
|
+
}
|
481
|
+
span.run83 {
|
482
|
+
background-color: rgb(255, 226, 178);
|
483
|
+
display: block;
|
484
|
+
}
|
485
|
+
span.run84 {
|
486
|
+
background-color: rgb(255, 224, 178);
|
487
|
+
display: block;
|
488
|
+
}
|
489
|
+
span.run85 {
|
490
|
+
background-color: rgb(255, 220, 178);
|
491
|
+
display: block;
|
492
|
+
}
|
493
|
+
span.run86 {
|
494
|
+
background-color: rgb(255, 218, 178);
|
495
|
+
display: block;
|
496
|
+
}
|
497
|
+
span.run87 {
|
498
|
+
background-color: rgb(255, 215, 178);
|
499
|
+
display: block;
|
500
|
+
}
|
501
|
+
span.run88 {
|
502
|
+
background-color: rgb(255, 212, 178);
|
503
|
+
display: block;
|
504
|
+
}
|
505
|
+
span.run89 {
|
506
|
+
background-color: rgb(255, 210, 178);
|
507
|
+
display: block;
|
508
|
+
}
|
509
|
+
span.run90 {
|
510
|
+
background-color: rgb(255, 206, 178);
|
511
|
+
display: block;
|
512
|
+
}
|
513
|
+
span.run91 {
|
514
|
+
background-color: rgb(255, 204, 178);
|
515
|
+
display: block;
|
516
|
+
}
|
517
|
+
span.run92 {
|
518
|
+
background-color: rgb(255, 201, 178);
|
519
|
+
display: block;
|
520
|
+
}
|
521
|
+
span.run93 {
|
522
|
+
background-color: rgb(255, 198, 178);
|
523
|
+
display: block;
|
524
|
+
}
|
525
|
+
span.run94 {
|
526
|
+
background-color: rgb(255, 196, 178);
|
527
|
+
display: block;
|
528
|
+
}
|
529
|
+
span.run95 {
|
530
|
+
background-color: rgb(255, 192, 178);
|
531
|
+
display: block;
|
532
|
+
}
|
533
|
+
span.run96 {
|
534
|
+
background-color: rgb(255, 189, 178);
|
535
|
+
display: block;
|
536
|
+
}
|
537
|
+
span.run97 {
|
538
|
+
background-color: rgb(255, 187, 178);
|
539
|
+
display: block;
|
540
|
+
}
|
541
|
+
span.run98 {
|
542
|
+
background-color: rgb(255, 184, 178);
|
543
|
+
display: block;
|
544
|
+
}
|
545
|
+
span.run99 {
|
546
|
+
background-color: rgb(255, 182, 178);
|
547
|
+
display: block;
|
548
|
+
}
|
549
|
+
span.run100 {
|
550
|
+
background-color: rgb(255, 178, 178);
|
551
|
+
display: block;
|
552
|
+
}
|
553
|
+
</style>
|
554
|
+
</head>
|
555
|
+
<body><h3>C0 code coverage information</h3>
|
556
|
+
<p>Generated on Sat Sep 13 00:31:29 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
|
557
|
+
</p>
|
558
|
+
<hr/>
|
559
|
+
<pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
560
|
+
</span><span class='marked1'>and this: this line is also marked as covered.
|
561
|
+
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
|
562
|
+
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
|
563
|
+
</span><span class='uncovered0'>Finally, here's a line marked as not executed.
|
564
|
+
</span></pre>
|
565
|
+
<table class='report'><thead><tr><td class='heading'>Name</td>
|
566
|
+
<td class='heading'>Total lines</td>
|
567
|
+
<td class='heading'>Lines of code</td>
|
568
|
+
<td class='heading'>Total coverage</td>
|
569
|
+
<td class='heading'>Code coverage</td>
|
570
|
+
</tr>
|
571
|
+
</thead>
|
572
|
+
<tbody><tr class='light'><td><a href='lib-classx-bracketable_rb.html'>lib/classx/bracketable.rb</a>
|
573
|
+
</td>
|
574
|
+
<td class='lines_total'><tt>61</tt>
|
575
|
+
</td>
|
576
|
+
<td class='lines_code'><tt>34</tt>
|
577
|
+
</td>
|
578
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
|
579
|
+
</td>
|
580
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
581
|
+
<td class='uncovered' width='0'/>
|
582
|
+
</tr>
|
583
|
+
</table>
|
584
|
+
</td>
|
585
|
+
</tr>
|
586
|
+
</table>
|
587
|
+
</td>
|
588
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
|
589
|
+
</td>
|
590
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
591
|
+
<td class='uncovered' width='0'/>
|
592
|
+
</tr>
|
593
|
+
</table>
|
594
|
+
</td>
|
595
|
+
</tr>
|
596
|
+
</table>
|
597
|
+
</td>
|
598
|
+
</tr>
|
599
|
+
</tbody>
|
600
|
+
</table>
|
601
|
+
<pre><span class="marked0"><a name="line1"></a> 1 module ClassX
|
602
|
+
</span><span class="inferred1"><a name="line2"></a> 2 # you can access attribute using Hash like interface.
|
603
|
+
</span><span class="inferred0"><a name="line3"></a> 3 # class YourClass
|
604
|
+
</span><span class="inferred1"><a name="line4"></a> 4 # include ClassX
|
605
|
+
</span><span class="inferred0"><a name="line5"></a> 5 # include ClassX::Bracketable
|
606
|
+
</span><span class="inferred1"><a name="line6"></a> 6 # has :x
|
607
|
+
</span><span class="inferred0"><a name="line7"></a> 7 # end
|
608
|
+
</span><span class="inferred1"><a name="line8"></a> 8 #
|
609
|
+
</span><span class="inferred0"><a name="line9"></a> 9 # your = YourClass.new(:x => 20)
|
610
|
+
</span><span class="inferred1"><a name="line10"></a>10 # your[:x] #=> 20
|
611
|
+
</span><span class="inferred0"><a name="line11"></a>11 # your[:x] = 30
|
612
|
+
</span><span class="inferred1"><a name="line12"></a>12 # your[:x] #=> 30
|
613
|
+
</span><span class="inferred0"><a name="line13"></a>13 #
|
614
|
+
</span><span class="inferred1"><a name="line14"></a>14 # you can also use for class attribute
|
615
|
+
</span><span class="inferred0"><a name="line15"></a>15 #
|
616
|
+
</span><span class="inferred1"><a name="line16"></a>16 # class YourClass
|
617
|
+
</span><span class="inferred0"><a name="line17"></a>17 # extend ClssX::CAttrs
|
618
|
+
</span><span class="inferred1"><a name="line18"></a>18 # extend ClassX::Bracketable
|
619
|
+
</span><span class="inferred0"><a name="line19"></a>19 #
|
620
|
+
</span><span class="inferred1"><a name="line20"></a>20 # class_has :x
|
621
|
+
</span><span class="inferred0"><a name="line21"></a>21 # end
|
622
|
+
</span><span class="inferred1"><a name="line22"></a>22 #
|
623
|
+
</span><span class="inferred0"><a name="line23"></a>23 # YourClass[:x] = 20
|
624
|
+
</span><span class="inferred1"><a name="line24"></a>24 # YourClass[:x] #=> 20
|
625
|
+
</span><span class="inferred0"><a name="line25"></a>25 #
|
626
|
+
</span><span class="marked1"><a name="line26"></a>26 module Bracketable
|
627
|
+
</span><span class="marked0"><a name="line27"></a>27 def [] name
|
628
|
+
</span><span class="marked1"><a name="line28"></a>28 attr_meth = nil
|
629
|
+
</span><span class="marked0"><a name="line29"></a>29 if respond_to? :class_attribute_of, true
|
630
|
+
</span><span class="marked1"><a name="line30"></a>30 attr_meth = :class_attribute_of
|
631
|
+
</span><span class="marked0"><a name="line31"></a>31 elsif respond_to? :attribute_of, true
|
632
|
+
</span><span class="marked1"><a name="line32"></a>32 attr_meth = :attribute_of
|
633
|
+
</span><span class="inferred0"><a name="line33"></a>33 else
|
634
|
+
</span><span class="marked1"><a name="line34"></a>34 return nil
|
635
|
+
</span><span class="inferred0"><a name="line35"></a>35 end
|
636
|
+
</span><span class="inferred1"><a name="line36"></a>36
|
637
|
+
</span><span class="marked0"><a name="line37"></a>37 if __send__(attr_meth).keys.include? name.to_s
|
638
|
+
</span><span class="marked1"><a name="line38"></a>38 __send__ name
|
639
|
+
</span><span class="inferred0"><a name="line39"></a>39 else
|
640
|
+
</span><span class="marked1"><a name="line40"></a>40 nil
|
641
|
+
</span><span class="inferred0"><a name="line41"></a>41 end
|
642
|
+
</span><span class="inferred1"><a name="line42"></a>42 end
|
643
|
+
</span><span class="inferred0"><a name="line43"></a>43
|
644
|
+
</span><span class="marked1"><a name="line44"></a>44 def []= name, val
|
645
|
+
</span><span class="marked0"><a name="line45"></a>45 attr_meth = nil
|
646
|
+
</span><span class="marked1"><a name="line46"></a>46 if respond_to? :class_attribute_of, true
|
647
|
+
</span><span class="marked0"><a name="line47"></a>47 attr_meth = :class_attribute_of
|
648
|
+
</span><span class="marked1"><a name="line48"></a>48 elsif respond_to? :attribute_of, true
|
649
|
+
</span><span class="marked0"><a name="line49"></a>49 attr_meth = :attribute_of
|
650
|
+
</span><span class="inferred1"><a name="line50"></a>50 else
|
651
|
+
</span><span class="marked0"><a name="line51"></a>51 return nil
|
652
|
+
</span><span class="inferred1"><a name="line52"></a>52 end
|
653
|
+
</span><span class="inferred0"><a name="line53"></a>53
|
654
|
+
</span><span class="marked1"><a name="line54"></a>54 if __send__(attr_meth).keys.include?(name.to_s) && respond_to?("#{name.to_s}=")
|
655
|
+
</span><span class="marked0"><a name="line55"></a>55 __send__ "#{name.to_s}=", val
|
656
|
+
</span><span class="inferred1"><a name="line56"></a>56 else
|
657
|
+
</span><span class="marked0"><a name="line57"></a>57 raise NoMethodError, ":#{name} is private, or missing"
|
658
|
+
</span><span class="inferred1"><a name="line58"></a>58 end
|
659
|
+
</span><span class="inferred0"><a name="line59"></a>59 end
|
660
|
+
</span><span class="inferred1"><a name="line60"></a>60 end
|
661
|
+
</span><span class="inferred0"><a name="line61"></a>61 end
|
662
|
+
</span></pre><hr/>
|
663
|
+
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
664
|
+
version 0.8.1.2.</p>
|
665
|
+
<p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
|
666
|
+
</a>
|
667
|
+
<a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
|
668
|
+
</a>
|
669
|
+
</p>
|
670
|
+
</body>
|
671
|
+
</html>
|