classx 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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-attribute_rb.html'>lib/classx/attribute.rb</a>
|
573
573
|
</td>
|
574
|
-
<td class='lines_total'><tt>
|
574
|
+
<td class='lines_total'><tt>286</tt>
|
575
575
|
</td>
|
576
|
-
<td class='lines_code'><tt>
|
576
|
+
<td class='lines_code'><tt>221</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'>98.6%</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='99'/>
|
581
|
+
<td class='uncovered' width='1'/>
|
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'>98.2%</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='98'/>
|
591
|
+
<td class='uncovered' width='2'/>
|
592
592
|
</tr>
|
593
593
|
</table>
|
594
594
|
</td>
|
@@ -599,190 +599,291 @@ span.run100 {
|
|
599
599
|
</tbody>
|
600
600
|
</table>
|
601
601
|
<pre><span class="marked0"><a name="line1"></a> 1 module ClassX
|
602
|
-
</span><span class="marked1"><a name="line2"></a> 2
|
603
|
-
</span><span class="marked0"><a name="line3"></a> 3
|
604
|
-
</span><span class="marked1"><a name="line4"></a> 4
|
605
|
-
</span><span class="marked0"><a name="line5"></a> 5
|
606
|
-
</span><span class="
|
607
|
-
</span><span class="inferred0"><a name="line7"></a> 7
|
608
|
-
</span><span class="
|
609
|
-
</span><span class="marked0"><a name="line9"></a> 9
|
610
|
-
</span><span class="
|
611
|
-
</span><span class="
|
612
|
-
</span><span class="inferred1"><a name="line12"></a> 12
|
613
|
-
</span><span class="inferred0"><a name="line13"></a> 13
|
614
|
-
</span><span class="marked1"><a name="line14"></a> 14
|
615
|
-
</span><span class="
|
616
|
-
</span><span class="
|
602
|
+
</span><span class="marked1"><a name="line2"></a> 2 module AttributeMethods #:nodoc:
|
603
|
+
</span><span class="marked0"><a name="line3"></a> 3 module ClassMethods #:nodoc:
|
604
|
+
</span><span class="marked1"><a name="line4"></a> 4 def value_class
|
605
|
+
</span><span class="marked0"><a name="line5"></a> 5 config[:isa] || config[:kind_of]
|
606
|
+
</span><span class="marked1"><a name="line6"></a> 6 end
|
607
|
+
</span><span class="inferred0"><a name="line7"></a> 7
|
608
|
+
</span><span class="inferred1"><a name="line8"></a> 8 # description for attribute
|
609
|
+
</span><span class="marked0"><a name="line9"></a> 9 def desc
|
610
|
+
</span><span class="uncovered1"><a name="line10"></a> 10 config[:desc]
|
611
|
+
</span><span class="uncovered0"><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 # when this option specify true, not raise error in #initialize without value.
|
614
|
+
</span><span class="marked1"><a name="line14"></a> 14 def optional?
|
615
|
+
</span><span class="marked0"><a name="line15"></a> 15 return config[:optional]
|
616
|
+
</span><span class="marked1"><a name="line16"></a> 16 end
|
617
617
|
</span><span class="inferred0"><a name="line17"></a> 17
|
618
|
-
</span><span class="inferred1"><a name="line18"></a> 18
|
619
|
-
</span><span class="marked0"><a name="line19"></a> 19
|
620
|
-
</span><span class="
|
621
|
-
</span><span class="
|
618
|
+
</span><span class="inferred1"><a name="line18"></a> 18 # when it lazy option specified, it will not be initialized when #initialize.
|
619
|
+
</span><span class="marked0"><a name="line19"></a> 19 def lazy?
|
620
|
+
</span><span class="marked1"><a name="line20"></a> 20 return config[:lazy]
|
621
|
+
</span><span class="marked0"><a name="line21"></a> 21 end
|
622
622
|
</span><span class="inferred1"><a name="line22"></a> 22
|
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="inferred0"><a name="line79"></a> 79
|
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="
|
693
|
-
</span><span class="
|
694
|
-
</span><span class="
|
695
|
-
</span><span class="marked0"><a name="line95"></a> 95
|
696
|
-
</span><span class="
|
697
|
-
</span><span class="marked0"><a name="line97"></a> 97
|
698
|
-
</span><span class="
|
699
|
-
</span><span class="
|
700
|
-
</span><span class="inferred1"><a name="line100"></a>100
|
701
|
-
</span><span class="
|
702
|
-
</span><span class="
|
703
|
-
</span><span class="
|
704
|
-
</span><span class="
|
705
|
-
</span><span class="
|
706
|
-
</span><span class="inferred1"><a name="line106"></a>106
|
707
|
-
</span><span class="
|
708
|
-
</span><span class="marked1"><a name="line108"></a>108
|
709
|
-
</span><span class="marked0"><a name="line109"></a>109
|
710
|
-
</span><span class="marked1"><a name="line110"></a>110
|
711
|
-
</span><span class="
|
712
|
-
</span><span class="
|
713
|
-
</span><span class="
|
714
|
-
</span><span class="
|
715
|
-
</span><span class="marked0"><a name="line115"></a>115
|
716
|
-
</span><span class="
|
717
|
-
</span><span class="inferred0"><a name="line117"></a>117
|
718
|
-
</span><span class="
|
719
|
-
</span><span class="
|
720
|
-
</span><span class="inferred1"><a name="line120"></a>120
|
721
|
-
</span><span class="marked0"><a name="line121"></a>121
|
722
|
-
</span><span class="marked1"><a name="line122"></a>122
|
723
|
-
</span><span class="
|
724
|
-
</span><span class="
|
725
|
-
</span><span class="inferred0"><a name="line125"></a>125
|
726
|
-
</span><span class="marked1"><a name="line126"></a>126
|
727
|
-
</span><span class="
|
728
|
-
</span><span class="inferred1"><a name="line128"></a>128
|
729
|
-
</span><span class="
|
730
|
-
</span><span class="
|
731
|
-
</span><span class="
|
732
|
-
</span><span class="
|
733
|
-
</span><span class="
|
734
|
-
</span><span class="
|
735
|
-
</span><span class="inferred0"><a name="line135"></a>135
|
736
|
-
</span><span class="
|
737
|
-
</span><span class="marked0"><a name="line137"></a>137
|
738
|
-
</span><span class="
|
739
|
-
</span><span class="marked0"><a name="line139"></a>139
|
740
|
-
</span><span class="marked1"><a name="line140"></a>140
|
741
|
-
</span><span class="
|
742
|
-
</span><span class="inferred1"><a name="line142"></a>142
|
743
|
-
</span><span class="
|
744
|
-
</span><span class="marked1"><a name="line144"></a>144
|
745
|
-
</span><span class="marked0"><a name="line145"></a>145
|
746
|
-
</span><span class="
|
747
|
-
</span><span class="inferred0"><a name="line147"></a>147
|
748
|
-
</span><span class="
|
749
|
-
</span><span class="marked0"><a name="line149"></a>149
|
750
|
-
</span><span class="marked1"><a name="line150"></a>150
|
751
|
-
</span><span class="
|
752
|
-
</span><span class="
|
753
|
-
</span><span class="
|
754
|
-
</span><span class="inferred1"><a name="line154"></a>154
|
755
|
-
</span><span class="
|
756
|
-
</span><span class="
|
757
|
-
</span><span class="
|
758
|
-
</span><span class="
|
759
|
-
</span><span class="
|
760
|
-
</span><span class="
|
761
|
-
</span><span class="
|
762
|
-
</span><span class="
|
763
|
-
</span><span class="
|
764
|
-
</span><span class="
|
765
|
-
</span><span class="
|
766
|
-
</span><span class="
|
767
|
-
</span><span class="
|
768
|
-
</span><span class="
|
769
|
-
</span><span class="
|
770
|
-
</span><span class="
|
771
|
-
</span><span class="
|
772
|
-
</span><span class="
|
773
|
-
</span><span class="
|
774
|
-
</span><span class="
|
775
|
-
</span><span class="
|
776
|
-
</span><span class="
|
777
|
-
</span><span class="marked0"><a name="line177"></a>177
|
778
|
-
</span><span class="
|
779
|
-
</span><span class="
|
780
|
-
</span><span class="
|
623
|
+
</span><span class="marked0"><a name="line23"></a> 23 def inspect
|
624
|
+
</span><span class="uncovered1"><a name="line24"></a> 24 "ClassX::Attribute[#{self.config.inspect}]"
|
625
|
+
</span><span class="uncovered0"><a name="line25"></a> 25 end
|
626
|
+
</span><span class="inferred1"><a name="line26"></a> 26
|
627
|
+
</span><span class="marked0"><a name="line27"></a> 27 module CoerceWithHash #:nodoc:
|
628
|
+
</span><span class="marked1"><a name="line28"></a> 28 def coerce val
|
629
|
+
</span><span class="marked0"><a name="line29"></a> 29 result = val
|
630
|
+
</span><span class="marked1"><a name="line30"></a> 30 config[:coerce].each do |cond, rule|
|
631
|
+
</span><span class="marked0"><a name="line31"></a> 31 case cond
|
632
|
+
</span><span class="marked1"><a name="line32"></a> 32 when Proc
|
633
|
+
</span><span class="marked0"><a name="line33"></a> 33 if cond.call(val)
|
634
|
+
</span><span class="marked1"><a name="line34"></a> 34 result = rule.call(val)
|
635
|
+
</span><span class="marked0"><a name="line35"></a> 35 break
|
636
|
+
</span><span class="inferred1"><a name="line36"></a> 36 end
|
637
|
+
</span><span class="marked0"><a name="line37"></a> 37 when Symbol
|
638
|
+
</span><span class="marked1"><a name="line38"></a> 38 if val.respond_to? cond
|
639
|
+
</span><span class="marked0"><a name="line39"></a> 39 result = rule.call(val)
|
640
|
+
</span><span class="marked1"><a name="line40"></a> 40 break
|
641
|
+
</span><span class="inferred0"><a name="line41"></a> 41 end
|
642
|
+
</span><span class="marked1"><a name="line42"></a> 42 when Module
|
643
|
+
</span><span class="marked0"><a name="line43"></a> 43 if val.kind_of? cond
|
644
|
+
</span><span class="marked1"><a name="line44"></a> 44 result = rule.call(val)
|
645
|
+
</span><span class="marked0"><a name="line45"></a> 45 break
|
646
|
+
</span><span class="inferred1"><a name="line46"></a> 46 end
|
647
|
+
</span><span class="inferred0"><a name="line47"></a> 47 end
|
648
|
+
</span><span class="inferred1"><a name="line48"></a> 48 end
|
649
|
+
</span><span class="inferred0"><a name="line49"></a> 49
|
650
|
+
</span><span class="marked1"><a name="line50"></a> 50 return result
|
651
|
+
</span><span class="inferred0"><a name="line51"></a> 51 end
|
652
|
+
</span><span class="inferred1"><a name="line52"></a> 52 end
|
653
|
+
</span><span class="marked0"><a name="line53"></a> 53 module CoerceWithArray #:nodoc:
|
654
|
+
</span><span class="marked1"><a name="line54"></a> 54 def coerce val
|
655
|
+
</span><span class="marked0"><a name="line55"></a> 55 result = val
|
656
|
+
</span><span class="marked1"><a name="line56"></a> 56 config[:coerce].each do |item|
|
657
|
+
</span><span class="marked0"><a name="line57"></a> 57 raise unless item.kind_of? Hash
|
658
|
+
</span><span class="inferred1"><a name="line58"></a> 58
|
659
|
+
</span><span class="marked0"><a name="line59"></a> 59 case item
|
660
|
+
</span><span class="marked1"><a name="line60"></a> 60 when Hash
|
661
|
+
</span><span class="marked0"><a name="line61"></a> 61 item.each do |cond, rule|
|
662
|
+
</span><span class="marked1"><a name="line62"></a> 62 case cond
|
663
|
+
</span><span class="marked0"><a name="line63"></a> 63 when Proc
|
664
|
+
</span><span class="marked1"><a name="line64"></a> 64 if cond.call(val)
|
665
|
+
</span><span class="marked0"><a name="line65"></a> 65 result = rule.call(val)
|
666
|
+
</span><span class="marked1"><a name="line66"></a> 66 break
|
667
|
+
</span><span class="inferred0"><a name="line67"></a> 67 end
|
668
|
+
</span><span class="inferred1"><a name="line68"></a> 68 end
|
669
|
+
</span><span class="inferred0"><a name="line69"></a> 69
|
670
|
+
</span><span class="marked1"><a name="line70"></a> 70 break if result
|
671
|
+
</span><span class="inferred0"><a name="line71"></a> 71 end
|
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 break if result
|
675
|
+
</span><span class="inferred0"><a name="line75"></a> 75 end
|
676
|
+
</span><span class="inferred1"><a name="line76"></a> 76
|
677
|
+
</span><span class="marked0"><a name="line77"></a> 77 return result
|
678
|
+
</span><span class="inferred1"><a name="line78"></a> 78 end
|
679
|
+
</span><span class="inferred0"><a name="line79"></a> 79 end
|
680
|
+
</span><span class="inferred1"><a name="line80"></a> 80
|
681
|
+
</span><span class="marked0"><a name="line81"></a> 81 module CoerceNothing #:nodoc:
|
682
|
+
</span><span class="marked1"><a name="line82"></a> 82 def coerce val
|
683
|
+
</span><span class="marked0"><a name="line83"></a> 83 val
|
684
|
+
</span><span class="marked1"><a name="line84"></a> 84 end
|
685
|
+
</span><span class="inferred0"><a name="line85"></a> 85 end
|
686
|
+
</span><span class="inferred1"><a name="line86"></a> 86
|
687
|
+
</span><span class="marked0"><a name="line87"></a> 87 module DefaultWithProc #:nodoc:
|
688
|
+
</span><span class="marked1"><a name="line88"></a> 88 def default parent
|
689
|
+
</span><span class="marked0"><a name="line89"></a> 89 config[:default].call(parent)
|
690
|
+
</span><span class="marked1"><a name="line90"></a> 90 end
|
691
|
+
</span><span class="inferred0"><a name="line91"></a> 91 end
|
692
|
+
</span><span class="marked1"><a name="line92"></a> 92 module DefaultWithNoProc #:nodoc:
|
693
|
+
</span><span class="marked0"><a name="line93"></a> 93 def default parent
|
694
|
+
</span><span class="marked1"><a name="line94"></a> 94 begin
|
695
|
+
</span><span class="marked0"><a name="line95"></a> 95 config[:default].dup
|
696
|
+
</span><span class="inferred1"><a name="line96"></a> 96 rescue Exception
|
697
|
+
</span><span class="marked0"><a name="line97"></a> 97 config[:default]
|
698
|
+
</span><span class="inferred1"><a name="line98"></a> 98 end
|
699
|
+
</span><span class="marked0"><a name="line99"></a> 99 end
|
700
|
+
</span><span class="inferred1"><a name="line100"></a>100 end
|
701
|
+
</span><span class="inferred0"><a name="line101"></a>101
|
702
|
+
</span><span class="marked1"><a name="line102"></a>102 module ValidateWithProc #:nodoc:
|
703
|
+
</span><span class="marked0"><a name="line103"></a>103 def validate? val
|
704
|
+
</span><span class="marked1"><a name="line104"></a>104 return config[:validate].call(val)
|
705
|
+
</span><span class="marked0"><a name="line105"></a>105 end
|
706
|
+
</span><span class="inferred1"><a name="line106"></a>106 end
|
707
|
+
</span><span class="inferred0"><a name="line107"></a>107
|
708
|
+
</span><span class="marked1"><a name="line108"></a>108 module ValidateWithNotProc #:nodoc:
|
709
|
+
</span><span class="marked0"><a name="line109"></a>109 def validate? val
|
710
|
+
</span><span class="marked1"><a name="line110"></a>110 return config[:validate] === val
|
711
|
+
</span><span class="marked0"><a name="line111"></a>111 end
|
712
|
+
</span><span class="inferred1"><a name="line112"></a>112 end
|
713
|
+
</span><span class="inferred0"><a name="line113"></a>113
|
714
|
+
</span><span class="marked1"><a name="line114"></a>114 module ValidateEach #:nodoc:
|
715
|
+
</span><span class="marked0"><a name="line115"></a>115 def validate? val
|
716
|
+
</span><span class="marked1"><a name="line116"></a>116 return false unless val.respond_to? :all?
|
717
|
+
</span><span class="inferred0"><a name="line117"></a>117
|
718
|
+
</span><span class="marked1"><a name="line118"></a>118 if self.value_class
|
719
|
+
</span><span class="marked0"><a name="line119"></a>119 return false unless val.kind_of?(self.value_class)
|
720
|
+
</span><span class="inferred1"><a name="line120"></a>120
|
721
|
+
</span><span class="marked0"><a name="line121"></a>121 case val
|
722
|
+
</span><span class="marked1"><a name="line122"></a>122 when Hash
|
723
|
+
</span><span class="marked0"><a name="line123"></a>123 if config[:validate_each].arity == 2
|
724
|
+
</span><span class="marked1"><a name="line124"></a>124 val.all? {|item| config[:validate_each].call(*item) }
|
725
|
+
</span><span class="inferred0"><a name="line125"></a>125 else
|
726
|
+
</span><span class="marked1"><a name="line126"></a>126 ClassX::Validate.validate(val, &config[:validate_each])
|
727
|
+
</span><span class="inferred0"><a name="line127"></a>127 end
|
728
|
+
</span><span class="inferred1"><a name="line128"></a>128 else
|
729
|
+
</span><span class="marked0"><a name="line129"></a>129 val.all? {|item| config[:validate_each].call(*item) }
|
730
|
+
</span><span class="inferred1"><a name="line130"></a>130 end
|
731
|
+
</span><span class="inferred0"><a name="line131"></a>131 else
|
732
|
+
</span><span class="marked1"><a name="line132"></a>132 val.all? {|item| config[:validate_each].call(*item) }
|
733
|
+
</span><span class="inferred0"><a name="line133"></a>133 end
|
734
|
+
</span><span class="inferred1"><a name="line134"></a>134 end
|
735
|
+
</span><span class="inferred0"><a name="line135"></a>135 end
|
736
|
+
</span><span class="inferred1"><a name="line136"></a>136
|
737
|
+
</span><span class="marked0"><a name="line137"></a>137 module ValidateKindOf #:nodoc:
|
738
|
+
</span><span class="marked1"><a name="line138"></a>138 def validate? val
|
739
|
+
</span><span class="marked0"><a name="line139"></a>139 return val.kind_of?(self.value_class)
|
740
|
+
</span><span class="marked1"><a name="line140"></a>140 end
|
741
|
+
</span><span class="inferred0"><a name="line141"></a>141 end
|
742
|
+
</span><span class="inferred1"><a name="line142"></a>142
|
743
|
+
</span><span class="marked0"><a name="line143"></a>143 module ValidateRespondTo #:nodoc:
|
744
|
+
</span><span class="marked1"><a name="line144"></a>144 def validate? val
|
745
|
+
</span><span class="marked0"><a name="line145"></a>145 return val.respond_to?(config[:respond_to])
|
746
|
+
</span><span class="marked1"><a name="line146"></a>146 end
|
747
|
+
</span><span class="inferred0"><a name="line147"></a>147 end
|
748
|
+
</span><span class="inferred1"><a name="line148"></a>148
|
749
|
+
</span><span class="marked0"><a name="line149"></a>149 module ValidateNothing #:nodoc:
|
750
|
+
</span><span class="marked1"><a name="line150"></a>150 def validate? val
|
751
|
+
</span><span class="inferred0"><a name="line151"></a>151 # nothing checked.
|
752
|
+
</span><span class="marked1"><a name="line152"></a>152 true
|
753
|
+
</span><span class="marked0"><a name="line153"></a>153 end
|
754
|
+
</span><span class="inferred1"><a name="line154"></a>154 end
|
755
|
+
</span><span class="inferred0"><a name="line155"></a>155 end
|
756
|
+
</span><span class="inferred1"><a name="line156"></a>156
|
757
|
+
</span><span class="marked0"><a name="line157"></a>157 module InstanceMethods #:nodoc:
|
758
|
+
</span><span class="marked1"><a name="line158"></a>158 def initialize val
|
759
|
+
</span><span class="marked0"><a name="line159"></a>159 @parent = val
|
760
|
+
</span><span class="marked1"><a name="line160"></a>160 @data = nil
|
761
|
+
</span><span class="inferred0"><a name="line161"></a>161 end
|
762
|
+
</span><span class="inferred1"><a name="line162"></a>162
|
763
|
+
</span><span class="marked0"><a name="line163"></a>163 def get
|
764
|
+
</span><span class="marked1"><a name="line164"></a>164 @data ||= self.class.default(@parent)
|
765
|
+
</span><span class="marked0"><a name="line165"></a>165 end
|
766
|
+
</span><span class="inferred1"><a name="line166"></a>166
|
767
|
+
</span><span class="inferred0"><a name="line167"></a>167 # XXX:
|
768
|
+
</span><span class="inferred1"><a name="line168"></a>168 # you should not call this method except for @parent instance's setter method.
|
769
|
+
</span><span class="inferred0"><a name="line169"></a>169 # It's because caching as instance_variable in @parent instance for performance.
|
770
|
+
</span><span class="marked1"><a name="line170"></a>170 def set val
|
771
|
+
</span><span class="marked0"><a name="line171"></a>171 val = self.class.coerce(val)
|
772
|
+
</span><span class="marked1"><a name="line172"></a>172 raise ClassX::InvalidAttrArgument unless self.class.validate? val
|
773
|
+
</span><span class="marked0"><a name="line173"></a>173 @data = val
|
774
|
+
</span><span class="inferred1"><a name="line174"></a>174 end
|
775
|
+
</span><span class="inferred0"><a name="line175"></a>175
|
776
|
+
</span><span class="marked1"><a name="line176"></a>176 def inspect
|
777
|
+
</span><span class="marked0"><a name="line177"></a>177 "<#ClassX::Attribute:#{object_id} #{ @data.nil? ? '@data=nil' : '@data=' + @data.inspect } @parent=#{@parent} config=#{self.class.config.inspect}>"
|
778
|
+
</span><span class="marked1"><a name="line178"></a>178 end
|
779
|
+
</span><span class="inferred0"><a name="line179"></a>179 end
|
780
|
+
</span><span class="inferred1"><a name="line180"></a>180 end
|
781
781
|
</span><span class="inferred0"><a name="line181"></a>181
|
782
|
-
</span><span class="
|
783
|
-
</span><span class="inferred0"><a name="line183"></a>183
|
784
|
-
</span><span class="inferred1"><a name="line184"></a>184
|
785
|
-
</span><span class="
|
782
|
+
</span><span class="inferred1"><a name="line182"></a>182 #
|
783
|
+
</span><span class="inferred0"><a name="line183"></a>183 # generating anonymous class for meta attribute class.
|
784
|
+
</span><span class="inferred1"><a name="line184"></a>184 #
|
785
|
+
</span><span class="marked0"><a name="line185"></a>185 class AttributeFactory
|
786
|
+
</span><span class="inferred1"><a name="line186"></a>186 #
|
787
|
+
</span><span class="inferred0"><a name="line187"></a>187 # creating anonymous class for meta attribute class.
|
788
|
+
</span><span class="marked1"><a name="line188"></a>188 def self.create args
|
789
|
+
</span><span class="inferred0"><a name="line189"></a>189 # TODO: hmm, ClassX::Commandable do nothing when freezed.
|
790
|
+
</span><span class="inferred1"><a name="line190"></a>190 #
|
791
|
+
</span><span class="inferred0"><a name="line191"></a>191 # if you would like to change attribute's infomation, it's better to redefine attribute.
|
792
|
+
</span><span class="inferred1"><a name="line192"></a>192 # So, config should freezed.
|
793
|
+
</span><span class="inferred0"><a name="line193"></a>193 # args.each do |key, val|
|
794
|
+
</span><span class="inferred1"><a name="line194"></a>194 # key.freeze
|
795
|
+
</span><span class="inferred0"><a name="line195"></a>195 # val.freeze
|
796
|
+
</span><span class="inferred1"><a name="line196"></a>196 # end
|
797
|
+
</span><span class="inferred0"><a name="line197"></a>197 # args.freeze
|
798
|
+
</span><span class="inferred1"><a name="line198"></a>198
|
799
|
+
</span><span class="marked0"><a name="line199"></a>199 raise ClassX::RequiredAttrShouldNotHaveDefault if args[:optional] == false && !args[:default].nil?
|
800
|
+
</span><span class="marked1"><a name="line200"></a>200 raise ClassX::OptionalAttrShouldBeWritable if args[:optional] && args[:writable] == false
|
801
|
+
</span><span class="inferred0"><a name="line201"></a>201
|
802
|
+
</span><span class="marked1"><a name="line202"></a>202 klass = Class.new
|
803
|
+
</span><span class="inferred0"><a name="line203"></a>203
|
804
|
+
</span><span class="marked1"><a name="line204"></a>204 klass.extend(ClassX::AttributeMethods::ClassMethods)
|
805
|
+
</span><span class="inferred0"><a name="line205"></a>205
|
806
|
+
</span><span class="inferred1"><a name="line206"></a>206 # you specify type changing rule with :coerce option.
|
807
|
+
</span><span class="marked0"><a name="line207"></a>207 if args[:coerce]
|
808
|
+
</span><span class="marked1"><a name="line208"></a>208 case args[:coerce]
|
809
|
+
</span><span class="marked0"><a name="line209"></a>209 when Hash
|
810
|
+
</span><span class="marked1"><a name="line210"></a>210 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceWithHash)
|
811
|
+
</span><span class="marked0"><a name="line211"></a>211 when Array
|
812
|
+
</span><span class="marked1"><a name="line212"></a>212 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceWithArray)
|
813
|
+
</span><span class="inferred0"><a name="line213"></a>213 end
|
814
|
+
</span><span class="inferred1"><a name="line214"></a>214 else
|
815
|
+
</span><span class="marked0"><a name="line215"></a>215 klass.extend(ClassX::AttributeMethods::ClassMethods::CoerceNothing)
|
816
|
+
</span><span class="inferred1"><a name="line216"></a>216 end
|
817
|
+
</span><span class="inferred0"><a name="line217"></a>217
|
818
|
+
</span><span class="inferred1"><a name="line218"></a>218 # default paramater for attribute.
|
819
|
+
</span><span class="inferred0"><a name="line219"></a>219 # if default is Proc, run Proc every time in instanciate.
|
820
|
+
</span><span class="marked1"><a name="line220"></a>220 case args[:default]
|
821
|
+
</span><span class="marked0"><a name="line221"></a>221 when Proc
|
822
|
+
</span><span class="marked1"><a name="line222"></a>222 klass.extend(ClassX::AttributeMethods::ClassMethods::DefaultWithProc)
|
823
|
+
</span><span class="inferred0"><a name="line223"></a>223 else
|
824
|
+
</span><span class="marked1"><a name="line224"></a>224 klass.extend(ClassX::AttributeMethods::ClassMethods::DefaultWithNoProc)
|
825
|
+
</span><span class="inferred0"><a name="line225"></a>225 end
|
826
|
+
</span><span class="inferred1"><a name="line226"></a>226
|
827
|
+
</span><span class="inferred0"><a name="line227"></a>227 # you can specify :validate option for checking when value is setted.
|
828
|
+
</span><span class="inferred1"><a name="line228"></a>228 # you can use :respond_to as shotcut for specifying { :validate => proc {|val| respond_to?(val, true) } }
|
829
|
+
</span><span class="inferred0"><a name="line229"></a>229 # you can use :isa or :kind_of as shotcut for specifying { :validate => proc {|val| kind_of?(val) } }
|
830
|
+
</span><span class="marked1"><a name="line230"></a>230 if args[:validate]
|
831
|
+
</span><span class="marked0"><a name="line231"></a>231 case args[:validate]
|
832
|
+
</span><span class="marked1"><a name="line232"></a>232 when Proc
|
833
|
+
</span><span class="marked0"><a name="line233"></a>233 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateWithProc)
|
834
|
+
</span><span class="inferred1"><a name="line234"></a>234 else
|
835
|
+
</span><span class="marked0"><a name="line235"></a>235 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateWithNotProc)
|
836
|
+
</span><span class="inferred1"><a name="line236"></a>236 end
|
837
|
+
</span><span class="marked0"><a name="line237"></a>237 elsif args[:validate_each]
|
838
|
+
</span><span class="marked1"><a name="line238"></a>238 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateEach)
|
839
|
+
</span><span class="marked0"><a name="line239"></a>239 elsif mod = ( args[:isa] || args[:kind_of] )
|
840
|
+
</span><span class="marked1"><a name="line240"></a>240 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateKindOf)
|
841
|
+
</span><span class="marked0"><a name="line241"></a>241 elsif args[:respond_to]
|
842
|
+
</span><span class="marked1"><a name="line242"></a>242 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateRespondTo)
|
843
|
+
</span><span class="inferred0"><a name="line243"></a>243 else
|
844
|
+
</span><span class="marked1"><a name="line244"></a>244 klass.extend(ClassX::AttributeMethods::ClassMethods::ValidateNothing)
|
845
|
+
</span><span class="inferred0"><a name="line245"></a>245 end
|
846
|
+
</span><span class="inferred1"><a name="line246"></a>246
|
847
|
+
</span><span class="inferred0"><a name="line247"></a>247 # for extending attribute point.
|
848
|
+
</span><span class="marked1"><a name="line248"></a>248 if args[:include]
|
849
|
+
</span><span class="marked0"><a name="line249"></a>249 case args[:include]
|
850
|
+
</span><span class="marked1"><a name="line250"></a>250 when Array
|
851
|
+
</span><span class="marked0"><a name="line251"></a>251 args[:include].each do |mod|
|
852
|
+
</span><span class="marked1"><a name="line252"></a>252 klass.__send__ :include, mod
|
853
|
+
</span><span class="inferred0"><a name="line253"></a>253 end
|
854
|
+
</span><span class="inferred1"><a name="line254"></a>254 else
|
855
|
+
</span><span class="marked0"><a name="line255"></a>255 klass.__send__ :include, args[:include]
|
856
|
+
</span><span class="inferred1"><a name="line256"></a>256 end
|
857
|
+
</span><span class="inferred0"><a name="line257"></a>257 end
|
858
|
+
</span><span class="inferred1"><a name="line258"></a>258
|
859
|
+
</span><span class="marked0"><a name="line259"></a>259 if args[:extend]
|
860
|
+
</span><span class="marked1"><a name="line260"></a>260 case args[:extend]
|
861
|
+
</span><span class="marked0"><a name="line261"></a>261 when Array
|
862
|
+
</span><span class="marked1"><a name="line262"></a>262 args[:extend].each do |mod|
|
863
|
+
</span><span class="marked0"><a name="line263"></a>263 klass.__send__ :extend, mod
|
864
|
+
</span><span class="inferred1"><a name="line264"></a>264 end
|
865
|
+
</span><span class="inferred0"><a name="line265"></a>265 else
|
866
|
+
</span><span class="marked1"><a name="line266"></a>266 klass.__send__ :extend, args[:extend]
|
867
|
+
</span><span class="inferred0"><a name="line267"></a>267 end
|
868
|
+
</span><span class="inferred1"><a name="line268"></a>268 end
|
869
|
+
</span><span class="inferred0"><a name="line269"></a>269
|
870
|
+
</span><span class="inferred1"><a name="line270"></a>270 # XXX: Hack for defining class method for klass
|
871
|
+
</span><span class="marked0"><a name="line271"></a>271 tmp_mod = Module.new
|
872
|
+
</span><span class="marked1"><a name="line272"></a>272 tmp_mod.module_eval do
|
873
|
+
</span><span class="marked0"><a name="line273"></a>273 define_method :config do
|
874
|
+
</span><span class="marked1"><a name="line274"></a>274 args
|
875
|
+
</span><span class="inferred0"><a name="line275"></a>275 end
|
876
|
+
</span><span class="inferred1"><a name="line276"></a>276 end
|
877
|
+
</span><span class="marked0"><a name="line277"></a>277 klass.extend(tmp_mod)
|
878
|
+
</span><span class="inferred1"><a name="line278"></a>278
|
879
|
+
</span><span class="marked0"><a name="line279"></a>279 klass.class_eval do
|
880
|
+
</span><span class="marked1"><a name="line280"></a>280 include ClassX::AttributeMethods::InstanceMethods
|
881
|
+
</span><span class="inferred0"><a name="line281"></a>281 end
|
882
|
+
</span><span class="inferred1"><a name="line282"></a>282
|
883
|
+
</span><span class="marked0"><a name="line283"></a>283 klass
|
884
|
+
</span><span class="inferred1"><a name="line284"></a>284 end
|
885
|
+
</span><span class="inferred0"><a name="line285"></a>285 end
|
886
|
+
</span><span class="inferred1"><a name="line286"></a>286 end
|
786
887
|
</span></pre><hr/>
|
787
888
|
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
788
889
|
version 0.8.1.2.</p>
|