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-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>
|