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.
Files changed (40) hide show
  1. data/ChangeLog +408 -2
  2. data/README +2 -2
  3. data/Rakefile +4 -3
  4. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html +1 -1
  5. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +1 -1
  6. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +1 -1
  7. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +1 -1
  8. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +1 -1
  9. data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1 -1
  10. data/doc/output/coverage/index.html +37 -172
  11. data/doc/output/coverage/lib-classx-attribute_rb.html +788 -0
  12. 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
  13. data/doc/output/coverage/lib-classx-validate_rb.html +36 -36
  14. data/doc/output/coverage/lib-classx_rb.html +74 -151
  15. data/example/commandable.rb +28 -0
  16. data/lib/classx.rb +35 -112
  17. data/lib/classx/attribute.rb +178 -0
  18. data/lib/classx/attributes.rb +80 -8
  19. data/lib/classx/commandable.rb +38 -0
  20. data/lib/classx/validate.rb +1 -1
  21. data/spec/classx/default_option_spec.rb +140 -0
  22. data/spec/classx/handles_spec.rb +44 -0
  23. data/spec/classx/with_coerce.rb +79 -0
  24. data/spec/classx/with_extend.rb +25 -0
  25. data/spec/classx/with_include.rb +25 -0
  26. data/spec/classx/with_multiple_class_spec.rb +23 -0
  27. data/spec/classx/without_accessor_spec.rb +26 -0
  28. data/spec/classx/without_anyoption_spec.rb +23 -0
  29. data/spec/classx/writable_option_spec.rb +73 -0
  30. data/spec/classx_attributes_spec.rb +30 -0
  31. data/tasks/basic_config.rake +5 -1
  32. metadata +22 -15
  33. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-drb_rb.html +0 -2373
  34. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-eq_rb.html +0 -626
  35. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-forwardable_rb.html +0 -828
  36. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-pp_rb.html +0 -1257
  37. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-prettyprint_rb.html +0 -1506
  38. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-timeout_rb.html +0 -715
  39. data/lib/classx.rb.new +0 -102
  40. data/spec/classx_spec.rb +0 -261
data/lib/classx.rb.new DELETED
@@ -1,102 +0,0 @@
1
-
2
- class ClassX
3
- class AttrRequiredError < Exception; end
4
- class InvalidSetterArgument < Exception; end
5
- class LazyOptionShouldHaveDefault < Exception; end
6
- class <<self
7
- def has name, attrs={ :is => :ro, :required => false }
8
- __send__ :attr_accessor, name
9
-
10
- setter_definition = ''
11
- if !attrs[:respond_to].nil?
12
- setter_definition += <<-END_OF_RESPOND_TO
13
- raise InvalidSetterArgument, "param :#{name}'s value \#{val.inspect} should respond_to #{attrs[:respond_to]}}" unless val.respond_to? #{attrs[:respond_to]}
14
- END_OF_RESPOND_TO
15
- end
16
- if !attrs[:kind_of].nil?
17
- setter_definition += <<-END_OF_KIND_OF
18
- raise InvalidSetterArgument, "param :#{name}'s value \#{val.inspect} should kind_of #{attrs[:kind_of]}" unless val.kind_of? #{attrs[:kind_of]}
19
- END_OF_KIND_OF
20
- end
21
-
22
- if !attrs[:default].nil?
23
- case attrs[:default]
24
- when Proc
25
- register_attr_default_value_proc name, &attrs[:default]
26
- else
27
- register_attr_default_value name, attrs[:default]
28
- end
29
- else
30
- raise LazyOptionShouldHaveDefault, "in :#{name}: :lazy option need specifying :default" if attrs[:lazy]
31
- end
32
-
33
- if attrs[:required]
34
- register_attr_required name
35
- end
36
-
37
- self.class_eval <<-END_OF_ACCESSOR
38
- attr_reader "#{name.to_s}"
39
-
40
- def #{name.to_s}= val
41
- #{setter_definition}
42
- @#{name.to_s} = val
43
- end
44
- END_OF_ACCESSOR
45
-
46
- if attrs[:is] == :ro
47
- __send__ :private,"#{name.to_s}="
48
- end
49
- end
50
-
51
- def register_attr_default_value name, value
52
- self.class_eval do
53
- define_method "set_attr_default_value_of[#{name.to_s}]" do
54
- self.__send__ "#{name.to_s}=", value
55
- end
56
-
57
- private "set_attr_default_value_of[#{name.to_s}]"
58
- end
59
- end
60
-
61
- def register_attr_default_value_proc name, &block
62
- self.class_eval do
63
- define_method "set_attr_default_value_of[#{name.to_s}]" do
64
- self.__send__ "#{name.to_s}=", block.call(self)
65
- end
66
-
67
- private "set_attr_default_value_of[#{name.to_s}]"
68
- end
69
- end
70
-
71
- def register_attr_required name
72
- @@attr_required ||= {}
73
- @@attr_required[name] = true
74
- end
75
- end
76
-
77
- def initialize hash={}
78
- before_init
79
- @@attr_required ||= {}
80
- @@attr_required.each do |req, is_required|
81
- if is_required
82
- raise AttrRequiredError, "param :#{req} is required to initialize #{self.class}" unless hash.keys.include?(req)
83
- end
84
- end
85
- hash.each do |key,val|
86
- __send__ "#{key.to_s}=", val
87
- end
88
- private_methods.select do |meth|
89
- meth.to_s =~ /^set_attr_default_value_of\[(.*?)\]$/
90
- end.each do |meth|
91
- __send__ meth
92
- end
93
- after_init
94
- end
95
-
96
- # just extend point
97
- def before_init
98
- end
99
-
100
- def after_init
101
- end
102
- end
data/spec/classx_spec.rb DELETED
@@ -1,261 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
- require 'classx'
3
-
4
- describe ClassX do
5
- describe '#has' do
6
- describe 'without accessor' do
7
- before do
8
- @class = Class.new(ClassX)
9
- @class.class_eval do
10
- end
11
- end
12
-
13
- it 'should not raise_error' do
14
- lambda { @class.new }.should_not raise_error(Exception)
15
- end
16
-
17
- it 'should raise ArgumentError when recieved nil as initialize argument' do
18
- lambda { @class.new(nil) }.should raise_error(ArgumentError)
19
- end
20
-
21
- it 'should raise ArgumentError when recieved not kind of Hash instance as initialize argument' do
22
- lambda { @class.new([]) }.should raise_error(ArgumentError)
23
- end
24
-
25
- it 'should have empty attributes' do
26
- @class.attributes.should be_empty
27
- end
28
- end
29
-
30
- describe 'without any option' do
31
- before do
32
- @class = Class.new(ClassX)
33
- @class.class_eval do
34
- has :x
35
- end
36
- end
37
-
38
- it 'should required :x on initialize' do
39
- lambda { @class.new }.should raise_error(ClassX::AttrRequiredError)
40
- end
41
-
42
- it 'should define #x= private method to class' do
43
- @class.private_instance_methods.map {|meth| meth.to_s }.should be_include("x=")
44
- end
45
- end
46
-
47
- describe 'with :writable option' do
48
- describe 'when you specify false for attribute' do
49
- before do
50
- @class = Class.new(ClassX)
51
- @class.class_eval do
52
- has :x, :writable => false
53
- end
54
- end
55
-
56
- it 'should define #x public method to class' do
57
- @class.instance_methods.map {|meth| meth.to_s }.should be_include('x')
58
- end
59
-
60
- it 'should define #x= private method to class' do
61
- @class.private_instance_methods.map {|meth| meth.to_s }.should be_include("x=")
62
- end
63
-
64
- it 'should have attributes [:x]' do
65
- @class.attributes.should == ['x']
66
- end
67
- end
68
-
69
- describe 'when you specify true for attribute' do
70
- before do
71
- @class = Class.new(ClassX)
72
- @class.class_eval do
73
- has :x, :writable => true
74
- end
75
- end
76
-
77
- it 'should define #x public method to class' do
78
- @class.instance_methods.map {|meth| meth.to_s }.should be_include('x')
79
- end
80
-
81
- it 'should define #x= public method to class' do
82
- @class.public_instance_methods.map {|meth| meth.to_s }.should be_include("x=")
83
- end
84
-
85
- it 'should have attributes [:x]' do
86
- @class.attributes.should == ['x']
87
- end
88
- end
89
- end
90
-
91
- describe 'with :default option' do
92
- describe 'when value is Proc' do
93
- before do
94
- @class = Class.new(ClassX)
95
- @class.class_eval do
96
- has :x, :default => proc { Object.new }
97
- end
98
- end
99
-
100
- it 'shouold have any value when instanciate' do
101
- @class.new.x.should_not be_nil
102
- end
103
-
104
- it 'should have difference of object_id between some instance' do
105
- @class.new.x.should_not equal(@class.new.x)
106
- end
107
-
108
- # TODO: with lazy option
109
- # it "can use self as Proc's argument" do
110
- # @class.class_eval do
111
- # has :y, :default => proc {|mine| mine.x }
112
- # end
113
-
114
- # @class.new.y.should equal(@class.new.x)
115
- # end
116
- end
117
-
118
- describe 'when value is not Proc' do
119
- before do
120
- @class = Class.new(ClassX)
121
- @class.class_eval do
122
- has :x, :default => []
123
- end
124
- end
125
-
126
- it 'should have any value when instanciate' do
127
- @class.new.x.should == []
128
- end
129
-
130
- it 'should have the same object_id between some instance' do
131
- @class.new.x.should equal(@class.new.x)
132
- end
133
- end
134
- end
135
-
136
- describe 'with :optional is false' do
137
- before do
138
- @class = Class.new(ClassX)
139
- @class.class_eval do
140
- has :x, :optional => false
141
- end
142
- end
143
-
144
- it "should raise AttrRequiredError without value" do
145
- lambda { @class.new }.should raise_error(ClassX::AttrRequiredError)
146
- end
147
-
148
- it "should not raise AttrRequiredError with value" do
149
- lambda { @class.new(:x => Object.new) }.should_not raise_error(ClassX::AttrRequiredError)
150
- end
151
-
152
- it 'should not raise AttrRequiredError with key as String' do
153
- lambda { @class.new('x' => Object.new) }.should_not raise_error(ClassX::AttrRequiredError)
154
- end
155
- end
156
-
157
- describe ':optional is false and with :default option' do
158
- it 'should raise ClassX::RequiredAttrShouldNotHaveDefault' do
159
- lambda {
160
- klass = Class.new(ClassX)
161
- klass.class_eval do
162
- has :x, :optional => false, :default => 1
163
- end
164
- }.should raise_error(ClassX::RequiredAttrShouldNotHaveDefault)
165
- end
166
- end
167
-
168
- describe 'declare attribute without :optional and :default option' do
169
- before do
170
- @class = Class.new(ClassX)
171
- @class.class_eval do
172
- has :x, :kind_of => Integer
173
- end
174
- end
175
-
176
- it 'should be required attribute' do
177
- lambda { @class.new }.should raise_error(ClassX::AttrRequiredError)
178
- end
179
- end
180
-
181
- describe ':optional is true and without :default option' do
182
- before do
183
- @class = Class.new(ClassX)
184
- @class.class_eval do
185
- has :x, :optional => true, :kind_of => Integer
186
- end
187
- end
188
-
189
- it 'should be required attribute' do
190
- lambda { @class.new }.should_not raise_error(ClassX::AttrRequiredError)
191
- end
192
- end
193
-
194
- describe 'with multiple class' do
195
- before do
196
- @class1 = Class.new(ClassX)
197
- @class1.class_eval do
198
- has :x
199
- end
200
- @class2 = Class.new(ClassX)
201
- @class2.class_eval do
202
- end
203
- end
204
-
205
- it 'should not raise AttrRequiredError when initialized anothor class' do
206
- lambda { @class2.new }.should_not raise_error(ClassX::AttrRequiredError)
207
- end
208
- end
209
-
210
- describe 'with :optional is true' do
211
- describe 'without :writable option' do
212
- before do
213
- @class = Class.new(ClassX)
214
- @class.class_eval do
215
- has :x, :optional => true
216
- end
217
- end
218
- it 'should not raise AttrRequiredError' do
219
- lambda { @class.new }.should_not raise_error(ClassX::AttrRequiredError)
220
- end
221
- end
222
-
223
- describe 'with :writable is false' do
224
- it 'should raise ClassX::OptionalAttrShouldBeWritable' do
225
- lambda {
226
- klass = Class.new(ClassX)
227
- klass.class_eval do
228
- has :x, :optional => true, :writable => false
229
- end
230
- }.should raise_error(ClassX::OptionalAttrShouldBeWritable)
231
- end
232
- end
233
-
234
- describe 'with :writable is true' do
235
- it 'should raise ClassX::OptionalAttrShouldBeWritable' do
236
- lambda {
237
- klass = Class.new(ClassX)
238
- klass.class_eval do
239
- has :x, :optional => true, :writable => true
240
- end
241
- }.should_not raise_error(ClassX::OptionalAttrShouldBeWritable)
242
- end
243
- end
244
- end
245
-
246
- describe 'not attribute param exist in #initialize argument' do
247
- before do
248
- @class = Class.new(ClassX)
249
- @class.class_eval do
250
- has :x
251
- end
252
- end
253
-
254
- # TODO: I'll change it to be able to choosee wheather check this strictly or not.
255
- # In many case, lack argument cause any problem. On the other hand, extra argument does not cause any problem, I think.
256
- it 'should be ignored' do
257
- lambda { @class.new(:x => 10, :y => 20 ) }.should_not raise_error(Exception)
258
- end
259
- end
260
- end
261
- end