simple_eav 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/simple_eav.rb +5 -1
- data/lib/version.rb +1 -1
- data/spec/lib/simple_eav_spec.rb +20 -1
- data/spec/support/person.rb +1 -0
- metadata +1 -1
data/lib/simple_eav.rb
CHANGED
@@ -17,6 +17,10 @@ module SimpleEav
|
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
20
|
+
def nested_attributes
|
21
|
+
associations_of_class.map{|assoc| "#{assoc}_attributes".to_sym }
|
22
|
+
end
|
23
|
+
|
20
24
|
def associations_of_class
|
21
25
|
self.class.reflect_on_all_associations.map{|assoc| assoc.name.to_sym }
|
22
26
|
end
|
@@ -27,7 +31,7 @@ module SimpleEav
|
|
27
31
|
|
28
32
|
public
|
29
33
|
def reserved_attributes
|
30
|
-
associations_of_class + actual_columns_of_table
|
34
|
+
associations_of_class + actual_columns_of_table + nested_attributes
|
31
35
|
end
|
32
36
|
|
33
37
|
def reserved_attribute?(attribute)
|
data/lib/version.rb
CHANGED
data/spec/lib/simple_eav_spec.rb
CHANGED
@@ -17,13 +17,17 @@ describe SimpleEav do
|
|
17
17
|
@child = Child.create
|
18
18
|
@person = Person.create(:child=>@child)
|
19
19
|
end
|
20
|
+
it "knows the nested attributes of the object" do
|
21
|
+
@person.send(:nested_attributes).should include(:child_attributes)
|
22
|
+
end
|
20
23
|
it "knows the associations of the object" do
|
21
24
|
@person.send(:associations_of_class).should include(:child)
|
22
25
|
end
|
23
26
|
it "knows the reserved attributes" do
|
24
27
|
@person.should_receive(:associations_of_class).and_return([:child])
|
25
28
|
@person.should_receive(:actual_columns_of_table).and_return([:name])
|
26
|
-
@person.
|
29
|
+
@person.should_receive(:nested_attributes).and_return([:child_attributes])
|
30
|
+
@person.reserved_attributes.should eql([:child, :name, :child_attributes])
|
27
31
|
end
|
28
32
|
it "does not accept reserved attributes for eav" do
|
29
33
|
@person.should_receive(:reserved_attributes).and_return([:name, :number])
|
@@ -57,6 +61,21 @@ describe SimpleEav do
|
|
57
61
|
@person.simple_eav_attributes.should_not have_key(:child)
|
58
62
|
@person.child.should eql(@child)
|
59
63
|
end
|
64
|
+
it "assigns the has_one via the accessor" do
|
65
|
+
@person.child = @child
|
66
|
+
@person.save!
|
67
|
+
@person.simple_eav_attributes.should_not have_key(:child)
|
68
|
+
@person.child.should eql(@child)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
describe "nested attributes" do
|
72
|
+
it "nests the attributes properly" do
|
73
|
+
child = Child.create :name=>'Joe Jr.'
|
74
|
+
person = Person.create :child=>child
|
75
|
+
lambda{
|
76
|
+
person.update_attributes :child_attributes=>{:name=>'John Jr.'}
|
77
|
+
}.should change(person.child, :name).from('Joe Jr.').to('John Jr.')
|
78
|
+
end
|
60
79
|
end
|
61
80
|
describe "serialization" do
|
62
81
|
it "serializes and deserializes the simple_eav attributes" do
|
data/spec/support/person.rb
CHANGED