classx 0.0.5 → 0.0.6
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 +555 -5
- data/README +1 -1
- data/Rakefile +1 -1
- data/doc/output/coverage/index.html +414 -0
- data/doc/output/coverage/lib-classx-attribute_rb.html +925 -0
- data/doc/output/coverage/lib-classx-attributes_rb.html +771 -0
- 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/lib-classx-declare_rb.html +659 -0
- data/doc/output/coverage/lib-classx-validate_rb.html +663 -0
- data/doc/output/coverage/lib-classx_rb.html +820 -0
- data/lib/classx.rb +1 -1
- data/lib/classx/attribute.rb +1 -1
- data/lib/classx/attributes.rb +6 -4
- data/lib/classx/class_attributes.rb +1 -1
- data/lib/classx/validate.rb +21 -8
- data/spec/classx/with_coerce_spec.rb +7 -1
- data/spec/classx/without_anyoption_spec.rb +4 -2
- data/spec/classx_class_attributes/without_anyoption_spec.rb +3 -2
- data/spec/classx_class_attributes/writable_option_spec.rb +1 -1
- data/spec/classx_validate_spec.rb +39 -13
- data/tasks/basic_config.rake +1 -1
- data/tasks/basic_tasks.rake +18 -13
- metadata +15 -4
data/lib/classx.rb
CHANGED
@@ -12,7 +12,7 @@ require 'classx/attributes'
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
# class Point3D < Point
|
15
|
-
# has :z, :
|
15
|
+
# has :z, :kind_of => Fixnum, :optional => true
|
16
16
|
# end
|
17
17
|
#
|
18
18
|
# Point.new(:x => 30, :y => 40) #=> <# Point @x=30, @y=40 >
|
data/lib/classx/attribute.rb
CHANGED
@@ -181,7 +181,7 @@ module ClassX
|
|
181
181
|
# It's because caching as instance_variable in @parent instance for performance.
|
182
182
|
def set val
|
183
183
|
val = self.class.coerce(val)
|
184
|
-
raise ClassX::InvalidAttrArgument unless self.class.validate? val
|
184
|
+
raise ClassX::InvalidAttrArgument, "#{val.inspect} is not valid for #{self.inspect}" unless self.class.validate? val
|
185
185
|
@data = val
|
186
186
|
|
187
187
|
self.class.trigger(@parent, val)
|
data/lib/classx/attributes.rb
CHANGED
@@ -82,10 +82,13 @@ module ClassX
|
|
82
82
|
# class YourClass
|
83
83
|
# include ClassX
|
84
84
|
# add_attribute :x,
|
85
|
-
# :writable =>
|
85
|
+
# :writable => false # defining accessor scope.
|
86
86
|
# :optional => ture, # defining attribute is required in initialize.
|
87
87
|
# :validate => proc {|val| val.respond_to? :to_s } # this attribute's value should adopted to this rule.
|
88
88
|
# :default => proc {|mine| mine.class.to_s.split(/::/).last.downcase } # default value for this attribute.
|
89
|
+
# :handle => [ :foo, :bar, :baz ] # define method :foo, :bar, :baz to delegate x's method.
|
90
|
+
# :coerce => { String => proc {|val| val.to_i } } # when it set String value, force convert to Integer.
|
91
|
+
# :trigger => proc {|mine,val| mine.y = val } # when this attribute set value, also update y attribute.
|
89
92
|
#
|
90
93
|
# end
|
91
94
|
#
|
@@ -118,12 +121,11 @@ module ClassX
|
|
118
121
|
|
119
122
|
define_method "#{name}=" do |val|
|
120
123
|
attr_instance = __send__ "attribute_of:#{name}"
|
121
|
-
attr_instance.set val
|
122
124
|
@__attribute_data_of ||= {}
|
123
|
-
@__attribute_data_of[name] = val
|
125
|
+
@__attribute_data_of[name] = attr_instance.set val
|
124
126
|
end
|
125
127
|
|
126
|
-
|
128
|
+
if attr_class.config[:writable] == false
|
127
129
|
private "#{name}="
|
128
130
|
end
|
129
131
|
|
data/lib/classx/validate.rb
CHANGED
@@ -20,20 +20,33 @@
|
|
20
20
|
#
|
21
21
|
module ClassX::Validate
|
22
22
|
private
|
23
|
-
def validate hash, &block #:doc:
|
23
|
+
def validate hash, options={}, &block #:doc:
|
24
24
|
# FIXME: it's experimental feature for caching validate class.
|
25
25
|
# it can use class variable because it use caller[0] as key.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
if options[:cache_key] != false
|
27
|
+
options[:cache_key] = caller[0]
|
28
|
+
end
|
29
|
+
|
30
|
+
if ( options[:cache_key] )
|
31
|
+
@@__validate_cached ||= {}
|
32
|
+
klass = @@__validate_cached[options[:cache_key]]
|
33
|
+
else
|
34
|
+
klass = nil
|
35
|
+
end
|
36
|
+
|
37
|
+
unless klass
|
38
|
+
klass = Class.new
|
39
|
+
klass.class_eval do
|
31
40
|
include ::ClassX
|
32
41
|
include ::ClassX::Bracketable
|
33
42
|
end
|
34
|
-
|
43
|
+
klass.class_eval(&block)
|
44
|
+
|
45
|
+
if options[:cache_key]
|
46
|
+
@@__validate_cached[options[:cache_key]] = klass
|
47
|
+
end
|
35
48
|
end
|
36
|
-
|
49
|
+
klass.new hash
|
37
50
|
end
|
38
51
|
|
39
52
|
module_function :validate
|
@@ -90,7 +90,7 @@ describe ClassX do
|
|
90
90
|
@class.class_eval do
|
91
91
|
include ClassX
|
92
92
|
|
93
|
-
has :x, :isa => Integer, :coerce => { String => proc {|val| val.to_i } }
|
93
|
+
has :x, :isa => Integer, :coerce => { String => proc {|val| val.to_i } }, :writable => true
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
@@ -101,6 +101,12 @@ describe ClassX do
|
|
101
101
|
it 'attrubute :x should not convert Object to Integer' do
|
102
102
|
lambda { @class.new(:x => Object.new ) }.should raise_error(ClassX::InvalidAttrArgument)
|
103
103
|
end
|
104
|
+
|
105
|
+
it 'should convert Str to Integer when you rewrite attribute :x' do
|
106
|
+
instance = @class.new(:x => "10")
|
107
|
+
lambda { instance.x = "20" }.should_not raise_error(Exception)
|
108
|
+
instance.x.should == 20
|
109
|
+
end
|
104
110
|
end
|
105
111
|
end
|
106
112
|
end
|
@@ -17,8 +17,10 @@ describe ClassX do
|
|
17
17
|
lambda { @class.new }.should raise_error(ClassX::AttrRequiredError)
|
18
18
|
end
|
19
19
|
|
20
|
-
it 'should
|
21
|
-
|
20
|
+
it 'should be able to rewrite :x attribute' do
|
21
|
+
instance =@class.new(:x => 10)
|
22
|
+
instance.x = 20
|
23
|
+
instance.x.should == 20
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -13,8 +13,9 @@ describe ClassX::ClassAttributes do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'should
|
17
|
-
@class.
|
16
|
+
it 'should be able to rewrite :x attribute' do
|
17
|
+
@class.x = 10
|
18
|
+
@class.x.should == 10
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -33,7 +33,7 @@ describe ClassX::ClassAttributes do
|
|
33
33
|
# => This exception was caused by mistake of program. So, in general I think, you should not
|
34
34
|
# rascue this error.
|
35
35
|
it 'should raise RuntimeError using attr_name(val)' do
|
36
|
-
pending
|
36
|
+
pending do
|
37
37
|
lambda { @class.x(20) }.should raise_error(RuntimeError)
|
38
38
|
end
|
39
39
|
end
|
@@ -2,7 +2,26 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
2
|
require 'classx'
|
3
3
|
require 'classx/validate'
|
4
4
|
|
5
|
-
describe ClassX::Validate do
|
5
|
+
describe ClassX::Validate, :shared => true do
|
6
|
+
it 'should raise ArgumentError without param is not kind of Hash instance' do
|
7
|
+
lambda { @class.new.run([]) }.should raise_error(ArgumentError)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should raise ClassX::AttrRequiredError' do
|
11
|
+
lambda { @class.new.run({}) }.should raise_error(ClassX::AttrRequiredError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should raise ClassX::InvalidArgumentError with InvalidAttrArgument' do
|
15
|
+
lambda { @class.new.run(:x => 'hoge', :y => 'fuga') }.should raise_error(ClassX::InvalidAttrArgument)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should not raise Exception' do
|
19
|
+
lambda { @class.new.run(:x => 10, :y => 20) }.should_not raise_error(Exception)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ClassX::Validate, "with cache" do
|
6
25
|
before do
|
7
26
|
@class = Class.new
|
8
27
|
@class.class_eval do
|
@@ -16,23 +35,30 @@ describe ClassX::Validate do
|
|
16
35
|
end
|
17
36
|
end
|
18
37
|
|
19
|
-
|
20
|
-
lambda { @class.new.run([]) }.should raise_error(ArgumentError)
|
21
|
-
end
|
38
|
+
it_should_behave_like "ClassX::Validate"
|
22
39
|
|
23
|
-
it 'should
|
24
|
-
|
40
|
+
it 'should be cached auto generated class' do
|
41
|
+
@class.new.run(:x => 10, :y => 20).class.should == @class.new.run(:x => 11, :y => 21).class
|
25
42
|
end
|
43
|
+
end
|
26
44
|
|
27
|
-
|
28
|
-
|
29
|
-
|
45
|
+
describe ClassX::Validate, "with no cache" do
|
46
|
+
before do
|
47
|
+
@class = Class.new
|
48
|
+
@class.class_eval do
|
30
49
|
|
31
|
-
|
32
|
-
|
50
|
+
def run params
|
51
|
+
ClassX::Validate.validate params, :cache_key => false do
|
52
|
+
has :x
|
53
|
+
has :y, :kind_of => Integer
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
33
57
|
end
|
34
58
|
|
35
|
-
|
36
|
-
|
59
|
+
it_should_behave_like "ClassX::Validate"
|
60
|
+
|
61
|
+
it 'should not be cached auto generated class' do
|
62
|
+
@class.new.run(:x => 10, :y => 20).class.should_not == @class.new.run(:x => 11, :y => 21).class
|
37
63
|
end
|
38
64
|
end
|
data/tasks/basic_config.rake
CHANGED
@@ -2,7 +2,7 @@ AUTHOR = "Keiji, Yoshimi"
|
|
2
2
|
EMAIL = "walf443 at gmail.com"
|
3
3
|
RUBYFORGE_PROJECT = "akasakarb"
|
4
4
|
RUBYFORGE_PROJECT_ID = 4314
|
5
|
-
HOMEPATH = "http
|
5
|
+
HOMEPATH = "http://walf443.github.com/classx/"
|
6
6
|
RDOC_OPTS = [
|
7
7
|
"--charset", "utf-8",
|
8
8
|
"--opname", "index.html",
|
data/tasks/basic_tasks.rake
CHANGED
@@ -92,19 +92,24 @@ task :uninstall => [:clean] do
|
|
92
92
|
sh %{sudo gem uninstall #{NAME}}
|
93
93
|
end
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
95
|
+
begin
|
96
|
+
allison_path = `allison --path`.chomp
|
97
|
+
Rake::RDocTask.new do |rdoc|
|
98
|
+
rdoc.rdoc_dir = 'html'
|
99
|
+
rdoc.options += RDOC_OPTS
|
100
|
+
rdoc.template = allison_path
|
101
|
+
if ENV['DOC_FILES']
|
102
|
+
rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
|
103
|
+
else
|
104
|
+
rdoc.rdoc_files.include('README', 'ChangeLog')
|
105
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
106
|
+
rdoc.rdoc_files.include('ext/**/*.c')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
rescue Exception => e
|
110
|
+
warn e
|
111
|
+
warn "skipping rdoc task"
|
112
|
+
ensure
|
108
113
|
end
|
109
114
|
|
110
115
|
desc "Publish to RubyForge"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: classx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keiji, Yoshimi
|
@@ -9,7 +9,7 @@ autorequire: ""
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-26 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -78,6 +78,17 @@ files:
|
|
78
78
|
- spec/classx_validate_spec.rb
|
79
79
|
- spec/spec.opts
|
80
80
|
- spec/spec_helper.rb
|
81
|
+
- doc/output
|
82
|
+
- doc/output/coverage
|
83
|
+
- doc/output/coverage/index.html
|
84
|
+
- doc/output/coverage/lib-classx-attribute_rb.html
|
85
|
+
- doc/output/coverage/lib-classx-attributes_rb.html
|
86
|
+
- doc/output/coverage/lib-classx-bracketable_rb.html
|
87
|
+
- doc/output/coverage/lib-classx-class_attributes_rb.html
|
88
|
+
- doc/output/coverage/lib-classx-commandable_rb.html
|
89
|
+
- doc/output/coverage/lib-classx-declare_rb.html
|
90
|
+
- doc/output/coverage/lib-classx-validate_rb.html
|
91
|
+
- doc/output/coverage/lib-classx_rb.html
|
81
92
|
- bench/attribute_get.rb
|
82
93
|
- bench/attribute_set.rb
|
83
94
|
- bench/define_attribute.rb
|
@@ -86,7 +97,7 @@ files:
|
|
86
97
|
- tasks/basic_config.rake
|
87
98
|
- tasks/basic_tasks.rake
|
88
99
|
has_rdoc: true
|
89
|
-
homepage: http://
|
100
|
+
homepage: http://walf443.github.com/classx/
|
90
101
|
post_install_message:
|
91
102
|
rdoc_options:
|
92
103
|
- --charset
|
@@ -120,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
131
|
requirements: []
|
121
132
|
|
122
133
|
rubyforge_project: akasakarb
|
123
|
-
rubygems_version: 1.
|
134
|
+
rubygems_version: 1.3.0
|
124
135
|
signing_key:
|
125
136
|
specification_version: 2
|
126
137
|
summary: Meta Framework extending and flexible attribute like Moose ( perl )
|