customize 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/customize.gemspec +2 -2
- data/lib/customize/inherited.rb +15 -9
- data/spec/customize/inherited_spec.rb +77 -45
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/customize.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "customize"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Wong"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-07"
|
13
13
|
s.description = "\n\t\teasy customize your domain model, including:\n\t\tcharacterize;\n\t\tinherit;\n\t\tformula\n\t"
|
14
14
|
s.email = "ryan@idolgo.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/customize/inherited.rb
CHANGED
@@ -46,16 +46,20 @@ module Customize
|
|
46
46
|
joins(:inherit_node).where("parent_id is null")
|
47
47
|
end
|
48
48
|
|
49
|
-
def type_tree
|
49
|
+
def type_tree node = nil
|
50
50
|
roots = root
|
51
|
-
converter = proc {|items|
|
52
|
-
out = items.
|
53
|
-
|
51
|
+
converter = proc {|items, node|
|
52
|
+
out = items.select { |item|
|
53
|
+
node.nil? || (item.inherit_node.id != node.id &&
|
54
|
+
(node.parent_node.nil? || item.inherit_node.id != node.parent_node.id))
|
55
|
+
}.collect { |item|
|
56
|
+
{:id=>item.id,:label=>item.label,:inherit_node_id=>item.inherit_node.id, :children=>converter.call(item.children, node)}
|
54
57
|
}
|
55
58
|
}
|
56
59
|
|
57
|
-
converter.call(roots)
|
60
|
+
converter.call(roots, node)
|
58
61
|
end
|
62
|
+
|
59
63
|
end
|
60
64
|
|
61
65
|
def parent
|
@@ -74,6 +78,8 @@ module Customize
|
|
74
78
|
raise 'should be save first' if self.new_record?
|
75
79
|
raise 'should be same class' if self.class != parent.class
|
76
80
|
raise 'should not be self' if self.id == parent.id
|
81
|
+
raise 'should not inherit descents' if self.descent_ids.include? parent.id
|
82
|
+
raise 'should not inherit parent' if self.parent.try(:id) == parent.id
|
77
83
|
self.class.transaction do
|
78
84
|
inherit_node.parent_id = parent.inherit_node.id
|
79
85
|
right = parent.inherit_node.right
|
@@ -90,10 +96,10 @@ module Customize
|
|
90
96
|
end
|
91
97
|
|
92
98
|
def inherit_association name, options={:include=>false}
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
99
|
+
a = association(name)
|
100
|
+
sql = ascents(options).joins(name).select("#{a.aliased_table_name}.#{a.klass.primary_key}").to_sql
|
101
|
+
a.klass.from("(#{sql}) as subquery, #{a.klass.table_name}").
|
102
|
+
where("#{a.klass.table_name}.#{a.klass.primary_key} = subquery.#{a.klass.primary_key}")
|
97
103
|
end
|
98
104
|
|
99
105
|
def descents
|
@@ -28,60 +28,93 @@ describe Customize::Inherited do
|
|
28
28
|
@parent.reload
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
31
|
+
context "inherit" do
|
32
|
+
it "cannot inherit different class" do
|
33
|
+
expect {
|
34
|
+
@child.inherit Object.new
|
35
|
+
}.to raise_error
|
36
|
+
end
|
37
|
+
|
38
|
+
it "have method ascent_ids" do
|
39
|
+
@child.ascent_ids.should_not be_nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it "child should have 1 ascent" do
|
43
|
+
@child.ascent_ids.should have(1).items
|
44
|
+
end
|
45
|
+
|
46
|
+
it "parent should have 1 descent" do
|
47
|
+
@parent.descent_ids.should have(1).items
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should support 2 levels inherit" do
|
51
|
+
c2 = Product.create!
|
52
|
+
c2.inherit @child
|
53
|
+
c2.ascent_ids.should have(2).items
|
54
|
+
@child.ascent_ids.should have(1).items
|
55
|
+
end
|
56
|
+
|
57
|
+
it "root has 1 item" do
|
58
|
+
Product.root.should have(1).items
|
59
|
+
end
|
60
|
+
|
61
|
+
it "child should have ascents" do
|
62
|
+
@child.ascents.should have(1).items
|
63
|
+
end
|
64
|
+
|
65
|
+
it "child is leaf" do
|
66
|
+
@child.leaf?.should be_true
|
67
|
+
end
|
68
|
+
|
69
|
+
it "parent is not leaf" do
|
70
|
+
@parent.leaf?.should_not be_true
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not inherit self" do
|
74
|
+
expect {
|
75
|
+
@parent.inherit @parent
|
76
|
+
}.to raise_error
|
77
|
+
end
|
48
78
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
79
|
+
it "should not inherit parent" do
|
80
|
+
expect {
|
81
|
+
@child.inherit @parent
|
82
|
+
}.to raise_error
|
83
|
+
end
|
55
84
|
|
56
|
-
|
57
|
-
|
58
|
-
|
85
|
+
it "should not inherit child" do
|
86
|
+
expect {
|
87
|
+
@parent.inherit @child
|
88
|
+
}.to raise_error
|
89
|
+
end
|
59
90
|
|
60
|
-
it "child should have ascents" do
|
61
|
-
@child.ascents.should have(1).items
|
62
91
|
end
|
63
92
|
|
64
|
-
|
65
|
-
|
66
|
-
|
93
|
+
context :type_tree do
|
94
|
+
it "convert type_tree" do
|
95
|
+
tree = Product.type_tree
|
96
|
+
tree.first[:id].should == @parent.id
|
97
|
+
tree.first[:children].should have(1).items
|
98
|
+
end
|
67
99
|
|
68
|
-
|
69
|
-
|
70
|
-
|
100
|
+
it "convert type_tree for parent" do
|
101
|
+
tree = Product.type_tree @parent.inherit_node
|
102
|
+
tree.should be_empty
|
103
|
+
end
|
71
104
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
105
|
+
it "convert type_tree for child" do
|
106
|
+
tree = Product.type_tree @child.inherit_node
|
107
|
+
tree.should be_empty
|
108
|
+
end
|
77
109
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
110
|
+
it "convert type_tree for 2lvl-child" do
|
111
|
+
node = Product.create
|
112
|
+
node.inherit @child
|
113
|
+
tree = Product.type_tree node.inherit_node
|
114
|
+
tree.should have(1).items
|
115
|
+
end
|
82
116
|
end
|
83
117
|
|
84
|
-
|
85
118
|
context "new node" do
|
86
119
|
subject { Product.new }
|
87
120
|
|
@@ -124,7 +157,6 @@ describe Customize::Inherited do
|
|
124
157
|
}
|
125
158
|
|
126
159
|
it "should have 2 inherit_association :product_objects" do
|
127
|
-
pending "cannot pass with with_model"
|
128
160
|
subject.inherit_association(:product_objects,:include=>true).should have(2).times
|
129
161
|
end
|
130
162
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: customize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -304,7 +304,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
304
304
|
version: '0'
|
305
305
|
segments:
|
306
306
|
- 0
|
307
|
-
hash:
|
307
|
+
hash: 562141071
|
308
308
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
309
309
|
none: false
|
310
310
|
requirements:
|