classx 0.0.1 → 0.0.2
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 +408 -2
- data/README +2 -2
- data/Rakefile +4 -3
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html +1 -1
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +1 -1
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +1 -1
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +1 -1
- data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +1 -1
- data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1 -1
- data/doc/output/coverage/index.html +37 -172
- data/doc/output/coverage/lib-classx-attribute_rb.html +788 -0
- data/doc/output/coverage/{-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-invokemethod_rb.html → lib-classx-attributes_rb.html} +96 -47
- data/doc/output/coverage/lib-classx-validate_rb.html +36 -36
- data/doc/output/coverage/lib-classx_rb.html +74 -151
- data/example/commandable.rb +28 -0
- data/lib/classx.rb +35 -112
- data/lib/classx/attribute.rb +178 -0
- data/lib/classx/attributes.rb +80 -8
- data/lib/classx/commandable.rb +38 -0
- data/lib/classx/validate.rb +1 -1
- data/spec/classx/default_option_spec.rb +140 -0
- data/spec/classx/handles_spec.rb +44 -0
- data/spec/classx/with_coerce.rb +79 -0
- data/spec/classx/with_extend.rb +25 -0
- data/spec/classx/with_include.rb +25 -0
- data/spec/classx/with_multiple_class_spec.rb +23 -0
- data/spec/classx/without_accessor_spec.rb +26 -0
- data/spec/classx/without_anyoption_spec.rb +23 -0
- data/spec/classx/writable_option_spec.rb +73 -0
- data/spec/classx_attributes_spec.rb +30 -0
- data/tasks/basic_config.rake +5 -1
- metadata +22 -15
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-drb_rb.html +0 -2373
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-eq_rb.html +0 -626
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-forwardable_rb.html +0 -828
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-pp_rb.html +0 -1257
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-prettyprint_rb.html +0 -1506
- data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-timeout_rb.html +0 -715
- data/lib/classx.rb.new +0 -102
- data/spec/classx_spec.rb +0 -261
@@ -1,5 +1,5 @@
|
|
1
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
|
2
|
+
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>lib/classx/attributes.rb - C0 code coverage information</title>
|
3
3
|
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
4
4
|
<style type='text/css'>span.cross-ref-title {
|
5
5
|
font-size: 140%;
|
@@ -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
|
556
|
+
<p>Generated on Thu Aug 21 17:23:12 +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...
|
@@ -569,26 +569,26 @@ span.run100 {
|
|
569
569
|
<td class='heading'>Code coverage</td>
|
570
570
|
</tr>
|
571
571
|
</thead>
|
572
|
-
<tbody><tr class='light'><td><a href='
|
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>85</tt>
|
575
575
|
</td>
|
576
|
-
<td class='lines_code'><tt>
|
576
|
+
<td class='lines_code'><tt>70</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'>95.3%</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='95'/>
|
581
|
+
<td class='uncovered' width='5'/>
|
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'>94.3%</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='94'/>
|
591
|
+
<td class='uncovered' width='6'/>
|
592
592
|
</tr>
|
593
593
|
</table>
|
594
594
|
</td>
|
@@ -598,42 +598,91 @@ span.run100 {
|
|
598
598
|
</tr>
|
599
599
|
</tbody>
|
600
600
|
</table>
|
601
|
-
<pre><span class="
|
602
|
-
</span><span class="
|
603
|
-
</span><span class="marked0"><a name="line3"></a> 3
|
604
|
-
</span><span class="
|
605
|
-
</span><span class="marked0"><a name="line5"></a> 5
|
606
|
-
</span><span class="marked1"><a name="line6"></a> 6
|
607
|
-
</span><span class="
|
608
|
-
</span><span class="
|
609
|
-
</span><span class="
|
610
|
-
</span><span class="
|
611
|
-
</span><span class="
|
612
|
-
</span><span class="inferred1"><a name="line12"></a>12
|
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="uncovered0"><a name="line23"></a>23
|
624
|
-
</span><span class="uncovered1"><a name="line24"></a>24
|
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="
|
601
|
+
<pre><span class="marked0"><a name="line1"></a> 1 class ClassX
|
602
|
+
</span><span class="marked1"><a name="line2"></a> 2 module Attributes
|
603
|
+
</span><span class="marked0"><a name="line3"></a> 3 ATTRIBUTE_REGEX = /\Aattribute_of:(\w+)\z/
|
604
|
+
</span><span class="inferred1"><a name="line4"></a> 4
|
605
|
+
</span><span class="marked0"><a name="line5"></a> 5 def attribute_of
|
606
|
+
</span><span class="marked1"><a name="line6"></a> 6 unless @__attribute_of
|
607
|
+
</span><span class="marked0"><a name="line7"></a> 7 @__attribute_of = {}
|
608
|
+
</span><span class="marked1"><a name="line8"></a> 8 private_instance_methods.select {|meth| meth.to_s =~ ATTRIBUTE_REGEX }.each do |meth|
|
609
|
+
</span><span class="marked0"><a name="line9"></a> 9 key = meth.to_s.sub(ATTRIBUTE_REGEX) { $1 }
|
610
|
+
</span><span class="marked1"><a name="line10"></a>10 @__attribute_of[key] = __send__ "attribute_of:#{key}"
|
611
|
+
</span><span class="inferred0"><a name="line11"></a>11 end
|
612
|
+
</span><span class="inferred1"><a name="line12"></a>12 end
|
613
|
+
</span><span class="inferred0"><a name="line13"></a>13
|
614
|
+
</span><span class="marked1"><a name="line14"></a>14 @__attribute_of
|
615
|
+
</span><span class="inferred0"><a name="line15"></a>15 end
|
616
|
+
</span><span class="inferred1"><a name="line16"></a>16
|
617
|
+
</span><span class="marked0"><a name="line17"></a>17 private
|
618
|
+
</span><span class="marked1"><a name="line18"></a>18 def define_attribute name, attribute
|
619
|
+
</span><span class="marked0"><a name="line19"></a>19 klass_attribute = ClassX::AttributeFactory.create(attribute)
|
620
|
+
</span><span class="marked1"><a name="line20"></a>20 mod = Module.new
|
621
|
+
</span><span class="marked0"><a name="line21"></a>21 mod.module_eval do
|
622
|
+
</span><span class="marked1"><a name="line22"></a>22 define_method "attribute_of:#{name}" do
|
623
|
+
</span><span class="uncovered0"><a name="line23"></a>23 klass_attribute
|
624
|
+
</span><span class="uncovered1"><a name="line24"></a>24 end
|
625
|
+
</span><span class="inferred0"><a name="line25"></a>25
|
626
|
+
</span><span class="marked1"><a name="line26"></a>26 private "attribute_of:#{name}"
|
627
|
+
</span><span class="inferred0"><a name="line27"></a>27 end
|
628
|
+
</span><span class="marked1"><a name="line28"></a>28 self.extend(mod)
|
629
|
+
</span><span class="marked0"><a name="line29"></a>29 @__attribute_of ||= {}
|
630
|
+
</span><span class="marked1"><a name="line30"></a>30 @__attribute_of[name] = klass_attribute
|
631
|
+
</span><span class="inferred0"><a name="line31"></a>31
|
632
|
+
</span><span class="marked1"><a name="line32"></a>32 define_method "attribute_of:#{name}" do
|
633
|
+
</span><span class="marked0"><a name="line33"></a>33 @__attribute_of ||= {}
|
634
|
+
</span><span class="marked1"><a name="line34"></a>34 @__attribute_of[name] ||= klass_attribute.new(self)
|
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 private "attribute_of:#{name}"
|
638
|
+
</span><span class="inferred1"><a name="line38"></a>38 end
|
639
|
+
</span><span class="inferred0"><a name="line39"></a>39
|
640
|
+
</span><span class="marked1"><a name="line40"></a>40 def add_attribute name, attrs={}
|
641
|
+
</span><span class="marked0"><a name="line41"></a>41 name = name.to_s
|
642
|
+
</span><span class="inferred1"><a name="line42"></a>42
|
643
|
+
</span><span class="marked0"><a name="line43"></a>43 define_attribute(name, attrs)
|
644
|
+
</span><span class="inferred1"><a name="line44"></a>44
|
645
|
+
</span><span class="marked0"><a name="line45"></a>45 define_method name do
|
646
|
+
</span><span class="marked1"><a name="line46"></a>46 attribute_of[name].get
|
647
|
+
</span><span class="inferred0"><a name="line47"></a>47 end
|
648
|
+
</span><span class="inferred1"><a name="line48"></a>48
|
649
|
+
</span><span class="marked0"><a name="line49"></a>49 define_method "#{name}=" do |val|
|
650
|
+
</span><span class="uncovered1"><a name="line50"></a>50 attribute_of[name].set val
|
651
|
+
</span><span class="uncovered0"><a name="line51"></a>51 end
|
652
|
+
</span><span class="inferred1"><a name="line52"></a>52
|
653
|
+
</span><span class="marked0"><a name="line53"></a>53 cached_attribute_of = attribute_of
|
654
|
+
</span><span class="marked1"><a name="line54"></a>54 if cached_attribute_of[name]
|
655
|
+
</span><span class="marked0"><a name="line55"></a>55 unless cached_attribute_of[name].config[:writable]
|
656
|
+
</span><span class="marked1"><a name="line56"></a>56 private "#{name}="
|
657
|
+
</span><span class="inferred0"><a name="line57"></a>57 end
|
658
|
+
</span><span class="inferred1"><a name="line58"></a>58
|
659
|
+
</span><span class="marked0"><a name="line59"></a>59 if cached_attribute_of[name].config[:handles]
|
660
|
+
</span><span class="marked1"><a name="line60"></a>60 case cached_attribute_of[name].config[:handles]
|
661
|
+
</span><span class="marked0"><a name="line61"></a>61 when Hash
|
662
|
+
</span><span class="marked1"><a name="line62"></a>62 cached_attribute_of[name].config[:handles].each do |before, after|
|
663
|
+
</span><span class="marked0"><a name="line63"></a>63 define_method before do
|
664
|
+
</span><span class="marked1"><a name="line64"></a>64 attribute_of[name].get.__send__ after
|
665
|
+
</span><span class="inferred0"><a name="line65"></a>65 end
|
666
|
+
</span><span class="inferred1"><a name="line66"></a>66 end
|
667
|
+
</span><span class="marked0"><a name="line67"></a>67 when Array
|
668
|
+
</span><span class="marked1"><a name="line68"></a>68 cached_attribute_of[name].config[:handles].each do |meth|
|
669
|
+
</span><span class="marked0"><a name="line69"></a>69 define_method meth do
|
670
|
+
</span><span class="marked1"><a name="line70"></a>70 attribute_of[name].get.__send__ meth
|
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 end
|
674
|
+
</span><span class="inferred1"><a name="line74"></a>74 end
|
675
|
+
</span><span class="inferred0"><a name="line75"></a>75 end
|
676
|
+
</span><span class="inferred1"><a name="line76"></a>76 end
|
677
|
+
</span><span class="inferred0"><a name="line77"></a>77
|
678
|
+
</span><span class="marked1"><a name="line78"></a>78 alias has add_attribute
|
679
|
+
</span><span class="inferred0"><a name="line79"></a>79
|
680
|
+
</span><span class="marked1"><a name="line80"></a>80 def included klass
|
681
|
+
</span><span class="marked0"><a name="line81"></a>81 klass.extend self
|
682
|
+
</span><span class="marked1"><a name="line82"></a>82 end
|
683
|
+
</span><span class="inferred0"><a name="line83"></a>83
|
684
|
+
</span><span class="inferred1"><a name="line84"></a>84 end
|
685
|
+
</span><span class="inferred0"><a name="line85"></a>85 end
|
637
686
|
</span></pre><hr/>
|
638
687
|
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
639
688
|
version 0.8.1.2.</p>
|
@@ -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
|
556
|
+
<p>Generated on Thu Aug 21 17:23:12 +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...
|
@@ -598,41 +598,41 @@ 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="
|
601
|
+
<pre><span class="marked1"><a name="line1"></a> 1 module ClassX::Validate
|
602
|
+
</span><span class="marked0"><a name="line2"></a> 2 private
|
603
|
+
</span><span class="inferred1"><a name="line3"></a> 3 #
|
604
|
+
</span><span class="inferred0"><a name="line4"></a> 4 # for validatation Hash parameter declaretively.
|
605
|
+
</span><span class="inferred1"><a name="line5"></a> 5 #
|
606
|
+
</span><span class="inferred0"><a name="line6"></a> 6 # require 'classx/validate'
|
607
|
+
</span><span class="inferred1"><a name="line7"></a> 7 #
|
608
|
+
</span><span class="inferred0"><a name="line8"></a> 8 # class YourClass < ClassX
|
609
|
+
</span><span class="inferred1"><a name="line9"></a> 9 # include Validate
|
610
|
+
</span><span class="inferred0"><a name="line10"></a>10 #
|
611
|
+
</span><span class="inferred1"><a name="line11"></a>11 # def run params
|
612
|
+
</span><span class="inferred0"><a name="line12"></a>12 # validate params do
|
613
|
+
</span><span class="inferred1"><a name="line13"></a>13 # has :x
|
614
|
+
</span><span class="inferred0"><a name="line14"></a>14 # has :y, :default => "hoge", :kind_of => Hash
|
615
|
+
</span><span class="inferred1"><a name="line15"></a>15 # end
|
616
|
+
</span><span class="inferred0"><a name="line16"></a>16 #
|
617
|
+
</span><span class="inferred1"><a name="line17"></a>17 # # do something with params
|
618
|
+
</span><span class="inferred0"><a name="line18"></a>18 #
|
619
|
+
</span><span class="inferred1"><a name="line19"></a>19 # end
|
620
|
+
</span><span class="inferred0"><a name="line20"></a>20 # end
|
621
|
+
</span><span class="inferred1"><a name="line21"></a>21 #
|
622
|
+
</span><span class="inferred0"><a name="line22"></a>22 # YourClass.new.run(:x => 10) # raise ClassX::AttrRequiredError
|
623
|
+
</span><span class="inferred1"><a name="line23"></a>23 #
|
624
|
+
</span><span class="marked0"><a name="line24"></a>24 def validate hash, &block
|
625
|
+
</span><span class="inferred1"><a name="line25"></a>25 # FIXME: it's experimental feature for caching validate class.
|
626
|
+
</span><span class="inferred0"><a name="line26"></a>26 # it can use class variable because it use caller[0] as key.
|
627
|
+
</span><span class="marked1"><a name="line27"></a>27 @@__validate_cached ||= {}
|
628
|
+
</span><span class="marked0"><a name="line28"></a>28 uniq_key = caller[0]
|
629
|
+
</span><span class="marked1"><a name="line29"></a>29 unless @@__validate_cached[uniq_key]
|
630
|
+
</span><span class="marked0"><a name="line30"></a>30 @@__validate_cached[uniq_key] = Class.new(ClassX)
|
631
|
+
</span><span class="marked1"><a name="line31"></a>31 @@__validate_cached[uniq_key].class_eval(&block)
|
632
|
+
</span><span class="inferred0"><a name="line32"></a>32 end
|
633
|
+
</span><span class="marked1"><a name="line33"></a>33 @@__validate_cached[uniq_key].new hash
|
634
|
+
</span><span class="inferred0"><a name="line34"></a>34 end
|
635
|
+
</span><span class="inferred1"><a name="line35"></a>35 end
|
636
636
|
</span></pre><hr/>
|
637
637
|
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
638
638
|
version 0.8.1.2.</p>
|
@@ -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
|
556
|
+
<p>Generated on Thu Aug 21 17:23:12 +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_rb.html'>lib/classx.rb</a>
|
573
573
|
</td>
|
574
|
-
<td class='lines_total'><tt>
|
574
|
+
<td class='lines_total'><tt>65</tt>
|
575
575
|
</td>
|
576
|
-
<td class='lines_code'><tt>
|
576
|
+
<td class='lines_code'><tt>49</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,148 +598,71 @@ 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="marked1"><a name="line66"></a> 66 self.class_eval do
|
667
|
-
</span><span class="marked0"><a name="line67"></a> 67 define_method "set_attr_default_value_of[#{name}]" do
|
668
|
-
</span><span class="marked1"><a name="line68"></a> 68 self.__send__ "#{name}=", value
|
669
|
-
</span><span class="inferred0"><a name="line69"></a> 69 end
|
670
|
-
</span><span class="inferred1"><a name="line70"></a> 70
|
671
|
-
</span><span class="marked0"><a name="line71"></a> 71 private "set_attr_default_value_of[#{name}]"
|
672
|
-
</span><span class="inferred1"><a name="line72"></a> 72 end
|
673
|
-
</span><span class="marked0"><a name="line73"></a> 73 end
|
674
|
-
</span><span class="inferred1"><a name="line74"></a> 74
|
675
|
-
</span><span class="marked0"><a name="line75"></a> 75 def register_attr_default_value_proc name, &block
|
676
|
-
</span><span class="marked1"><a name="line76"></a> 76 self.class_eval do
|
677
|
-
</span><span class="marked0"><a name="line77"></a> 77 define_method "set_attr_default_value_of[#{name}]" do
|
678
|
-
</span><span class="marked1"><a name="line78"></a> 78 self.__send__ "#{name}=", block.call(self)
|
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 private "set_attr_default_value_of[#{name}]"
|
682
|
-
</span><span class="inferred1"><a name="line82"></a> 82 end
|
683
|
-
</span><span class="inferred0"><a name="line83"></a> 83 end
|
684
|
-
</span><span class="inferred1"><a name="line84"></a> 84
|
685
|
-
</span><span class="marked0"><a name="line85"></a> 85 def register_attr_required name
|
686
|
-
</span><span class="marked1"><a name="line86"></a> 86 define_method "attr_required[#{name}]" do
|
687
|
-
</span><span class="inferred0"><a name="line87"></a> 87 end
|
688
|
-
</span><span class="inferred1"><a name="line88"></a> 88
|
689
|
-
</span><span class="marked0"><a name="line89"></a> 89 private "attr_required[#{name}]"
|
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 ATTR_REGEX = /^([^=]*?)=$/
|
693
|
-
</span><span class="marked0"><a name="line93"></a> 93 def attributes
|
694
|
-
</span><span class="marked1"><a name="line94"></a> 94 ( public_instance_methods + private_instance_methods ).select {|meth|
|
695
|
-
</span><span class="marked0"><a name="line95"></a> 95 meth.to_s =~ ATTR_REGEX
|
696
|
-
</span><span class="inferred1"><a name="line96"></a> 96 }.map {|item|
|
697
|
-
</span><span class="marked0"><a name="line97"></a> 97 item.to_s.sub(ATTR_REGEX) { $1 }
|
698
|
-
</span><span class="inferred1"><a name="line98"></a> 98 }
|
699
|
-
</span><span class="marked0"><a name="line99"></a> 99 end
|
700
|
-
</span><span class="inferred1"><a name="line100"></a>100
|
701
|
-
</span><span class="marked0"><a name="line101"></a>101 ATTR_REQUIRED_REGEX = /^attr_required\[(.*?)\]/
|
702
|
-
</span><span class="marked1"><a name="line102"></a>102 def required_attributes
|
703
|
-
</span><span class="marked0"><a name="line103"></a>103 private_instance_methods.select {|meth|
|
704
|
-
</span><span class="marked1"><a name="line104"></a>104 meth.to_s =~ ATTR_REQUIRED_REGEX
|
705
|
-
</span><span class="inferred0"><a name="line105"></a>105 }.map {|item|
|
706
|
-
</span><span class="marked1"><a name="line106"></a>106 item.sub(ATTR_REQUIRED_REGEX) { $1 }
|
707
|
-
</span><span class="inferred0"><a name="line107"></a>107 }
|
708
|
-
</span><span class="marked1"><a name="line108"></a>108 end
|
709
|
-
</span><span class="inferred0"><a name="line109"></a>109 end
|
710
|
-
</span><span class="inferred1"><a name="line110"></a>110
|
711
|
-
</span><span class="marked0"><a name="line111"></a>111 def initialize hash={}
|
712
|
-
</span><span class="marked1"><a name="line112"></a>112 before_init hash
|
713
|
-
</span><span class="inferred0"><a name="line113"></a>113
|
714
|
-
</span><span class="marked1"><a name="line114"></a>114 unless hash && hash.kind_of?(Hash)
|
715
|
-
</span><span class="marked0"><a name="line115"></a>115 raise ArgumentError, "#{hash.inspect} was wrong as arguments. please specify kind of Hash instance"
|
716
|
-
</span><span class="inferred1"><a name="line116"></a>116 end
|
717
|
-
</span><span class="inferred0"><a name="line117"></a>117
|
718
|
-
</span><span class="marked1"><a name="line118"></a>118 hash = hash.inject({}) {|h,item| h[item.first.to_s] = item.last; h } # allow String or Symbol for key
|
719
|
-
</span><span class="marked0"><a name="line119"></a>119 self.class.required_attributes.each do |name|
|
720
|
-
</span><span class="marked1"><a name="line120"></a>120 raise AttrRequiredError, "param :#{name} is required to #{hash.inspect}" unless hash.keys.include?(name)
|
721
|
-
</span><span class="inferred0"><a name="line121"></a>121 end
|
722
|
-
</span><span class="marked1"><a name="line122"></a>122 hash.each do |key,val|
|
723
|
-
</span><span class="marked0"><a name="line123"></a>123 if respond_to? "#{key}=", true
|
724
|
-
</span><span class="marked1"><a name="line124"></a>124 __send__ "#{key}=", val
|
725
|
-
</span><span class="inferred0"><a name="line125"></a>125 end
|
726
|
-
</span><span class="inferred1"><a name="line126"></a>126 end
|
727
|
-
</span><span class="marked0"><a name="line127"></a>127 private_methods.select do |meth|
|
728
|
-
</span><span class="marked1"><a name="line128"></a>128 meth.to_s =~ /^set_attr_default_value_of\[(.*?)\]$/
|
729
|
-
</span><span class="inferred0"><a name="line129"></a>129 end.each do |meth|
|
730
|
-
</span><span class="marked1"><a name="line130"></a>130 __send__ meth
|
731
|
-
</span><span class="inferred0"><a name="line131"></a>131 end
|
732
|
-
</span><span class="marked1"><a name="line132"></a>132 after_init
|
733
|
-
</span><span class="inferred0"><a name="line133"></a>133 end
|
734
|
-
</span><span class="inferred1"><a name="line134"></a>134
|
735
|
-
</span><span class="inferred0"><a name="line135"></a>135 # just extend point
|
736
|
-
</span><span class="marked1"><a name="line136"></a>136 def before_init hash
|
737
|
-
</span><span class="marked0"><a name="line137"></a>137 end
|
738
|
-
</span><span class="inferred1"><a name="line138"></a>138
|
739
|
-
</span><span class="marked0"><a name="line139"></a>139 def after_init
|
740
|
-
</span><span class="marked1"><a name="line140"></a>140 end
|
741
|
-
</span><span class="inferred0"><a name="line141"></a>141
|
742
|
-
</span><span class="inferred1"><a name="line142"></a>142 end
|
601
|
+
<pre><span class="marked1"><a name="line1"></a> 1 require 'classx/attribute'
|
602
|
+
</span><span class="marked0"><a name="line2"></a> 2 require 'classx/attributes'
|
603
|
+
</span><span class="inferred1"><a name="line3"></a> 3
|
604
|
+
</span><span class="marked0"><a name="line4"></a> 4 class ClassX
|
605
|
+
</span><span class="marked1"><a name="line5"></a> 5 class InstanceException < Exception; end
|
606
|
+
</span><span class="marked0"><a name="line6"></a> 6 class AttrRequiredError < InstanceException; end
|
607
|
+
</span><span class="marked1"><a name="line7"></a> 7 class InvalidAttrArgument < InstanceException; end
|
608
|
+
</span><span class="marked0"><a name="line8"></a> 8 class LazyOptionShouldHaveDefault < Exception; end
|
609
|
+
</span><span class="marked1"><a name="line9"></a> 9 class OptionalAttrShouldBeWritable < Exception; end
|
610
|
+
</span><span class="marked0"><a name="line10"></a>10 class RequiredAttrShouldNotHaveDefault < Exception; end
|
611
|
+
</span><span class="inferred1"><a name="line11"></a>11
|
612
|
+
</span><span class="marked0"><a name="line12"></a>12 extend Attributes
|
613
|
+
</span><span class="inferred1"><a name="line13"></a>13
|
614
|
+
</span><span class="marked0"><a name="line14"></a>14 def initialize *args
|
615
|
+
</span><span class="marked1"><a name="line15"></a>15 hash = before_init(*args)
|
616
|
+
</span><span class="inferred0"><a name="line16"></a>16
|
617
|
+
</span><span class="marked1"><a name="line17"></a>17 unless hash && hash.kind_of?(Hash)
|
618
|
+
</span><span class="marked0"><a name="line18"></a>18 raise ArgumentError, "#{hash.inspect} was wrong as arguments. please specify kind of Hash instance"
|
619
|
+
</span><span class="inferred1"><a name="line19"></a>19 end
|
620
|
+
</span><span class="inferred0"><a name="line20"></a>20
|
621
|
+
</span><span class="inferred1"><a name="line21"></a>21 # allow String or Symbol for key
|
622
|
+
</span><span class="marked0"><a name="line22"></a>22 tmp_hash = {}
|
623
|
+
</span><span class="marked1"><a name="line23"></a>23 hash.each do |key,val|
|
624
|
+
</span><span class="marked0"><a name="line24"></a>24 tmp_hash[key.to_s] = val
|
625
|
+
</span><span class="inferred1"><a name="line25"></a>25 end
|
626
|
+
</span><span class="marked0"><a name="line26"></a>26 hash = tmp_hash
|
627
|
+
</span><span class="inferred1"><a name="line27"></a>27
|
628
|
+
</span><span class="marked0"><a name="line28"></a>28 cached_attribute_of = attribute_of
|
629
|
+
</span><span class="marked1"><a name="line29"></a>29 hash.each do |key, val|
|
630
|
+
</span><span class="marked0"><a name="line30"></a>30 if cached_attribute_of[key]
|
631
|
+
</span><span class="marked1"><a name="line31"></a>31 cached_attribute_of[key].set val
|
632
|
+
</span><span class="inferred0"><a name="line32"></a>32 end
|
633
|
+
</span><span class="inferred1"><a name="line33"></a>33 end
|
634
|
+
</span><span class="inferred0"><a name="line34"></a>34
|
635
|
+
</span><span class="marked1"><a name="line35"></a>35 cached_attribute_of.each do |key, val|
|
636
|
+
</span><span class="marked0"><a name="line36"></a>36 next if val.class.lazy?
|
637
|
+
</span><span class="marked1"><a name="line37"></a>37 raise AttrRequiredError, "param: :#{key} is required to #{hash.inspect}" if !val.class.optional? && !val.get
|
638
|
+
</span><span class="inferred0"><a name="line38"></a>38 end
|
639
|
+
</span><span class="inferred1"><a name="line39"></a>39
|
640
|
+
</span><span class="marked0"><a name="line40"></a>40 after_init
|
641
|
+
</span><span class="inferred1"><a name="line41"></a>41 end
|
642
|
+
</span><span class="inferred0"><a name="line42"></a>42
|
643
|
+
</span><span class="marked1"><a name="line43"></a>43 def attribute_of
|
644
|
+
</span><span class="marked0"><a name="line44"></a>44 hash = {}
|
645
|
+
</span><span class="marked1"><a name="line45"></a>45 if self.class.attribute_of
|
646
|
+
</span><span class="marked0"><a name="line46"></a>46 self.class.attribute_of.keys.each do |key|
|
647
|
+
</span><span class="marked1"><a name="line47"></a>47 hash[key] = __send__ "attribute_of:#{key}"
|
648
|
+
</span><span class="inferred0"><a name="line48"></a>48 end
|
649
|
+
</span><span class="inferred1"><a name="line49"></a>49 end
|
650
|
+
</span><span class="inferred0"><a name="line50"></a>50
|
651
|
+
</span><span class="marked1"><a name="line51"></a>51 hash
|
652
|
+
</span><span class="inferred0"><a name="line52"></a>52 end
|
653
|
+
</span><span class="inferred1"><a name="line53"></a>53
|
654
|
+
</span><span class="inferred0"><a name="line54"></a>54 # just extend point
|
655
|
+
</span><span class="marked1"><a name="line55"></a>55 def before_init *args
|
656
|
+
</span><span class="marked0"><a name="line56"></a>56 raise ArgumentError if args.size > 1
|
657
|
+
</span><span class="inferred1"><a name="line57"></a>57
|
658
|
+
</span><span class="marked0"><a name="line58"></a>58 hash = args.first
|
659
|
+
</span><span class="marked1"><a name="line59"></a>59 hash.nil? ? {} : hash
|
660
|
+
</span><span class="inferred0"><a name="line60"></a>60 end
|
661
|
+
</span><span class="inferred1"><a name="line61"></a>61
|
662
|
+
</span><span class="marked0"><a name="line62"></a>62 def after_init
|
663
|
+
</span><span class="marked1"><a name="line63"></a>63 end
|
664
|
+
</span><span class="inferred0"><a name="line64"></a>64
|
665
|
+
</span><span class="inferred1"><a name="line65"></a>65 end
|
743
666
|
</span></pre><hr/>
|
744
667
|
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
745
668
|
version 0.8.1.2.</p>
|