active_poro 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/active_poro/relations.rb +9 -7
- data/lib/active_poro/version.rb +1 -1
- data/spec/active_poro_spec.rb +15 -0
- data/spec/spec_helper.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3286adee5f545522ce345124881eef5115a971c7
|
4
|
+
data.tar.gz: ae3738aa15aa080e96b0007f7795d84078aafd07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec03afae6e91b65a42848405c2b65fb07a7e01b862b8131613f690f4eb67c7aa08c9c882c579f2cdcf99353f7afcb56b51c133902aa54f9e7a7a620f54b85915
|
7
|
+
data.tar.gz: fa60eedcaee6d2753a1ca749744cfbcb461808d97b3964ee2c90764d127a5dbf36175753143ff5389fc8c917734ad4858984622ea37e481d1c9c7beb6e313c62
|
data/README.md
CHANGED
@@ -11,8 +11,12 @@ module ActivePoro
|
|
11
11
|
|
12
12
|
# define setter method
|
13
13
|
define_method "#{target_name}=" do |members|
|
14
|
+
|
15
|
+
# nil to empty
|
16
|
+
members ||= []
|
17
|
+
|
14
18
|
# set the instance variable only if I am now the rightful owner
|
15
|
-
instance_variable_set("@#{target_name}", members
|
19
|
+
instance_variable_set("@#{target_name}", members)
|
16
20
|
reflected_association_name = self.class.name.underscore
|
17
21
|
members.each do |member|
|
18
22
|
|
@@ -47,10 +51,10 @@ module ActivePoro
|
|
47
51
|
# define setter method
|
48
52
|
define_method "#{target_name}=" do |member|
|
49
53
|
reflected_association_name = self.class.name.underscore
|
50
|
-
|
54
|
+
if member.respond_to?(reflected_association_name) && member.send(reflected_association_name) != self
|
51
55
|
member.send "#{reflected_association_name}=", self
|
52
56
|
end
|
53
|
-
instance_variable_set("@#{target_name}",
|
57
|
+
instance_variable_set("@#{target_name}", member)
|
54
58
|
end
|
55
59
|
end
|
56
60
|
|
@@ -66,10 +70,8 @@ module ActivePoro
|
|
66
70
|
instance_variable_set("@#{target_name}", member)
|
67
71
|
reflected_association_name = self.class.name.underscore
|
68
72
|
# add myself to reflected association
|
69
|
-
if member.respond_to? reflected_association_name
|
70
|
-
|
71
|
-
member.send("#{reflected_association_name}=", self)
|
72
|
-
end
|
73
|
+
if member.respond_to?(reflected_association_name) && member.send(reflected_association_name) != self
|
74
|
+
member.send("#{reflected_association_name}=", self)
|
73
75
|
elsif member.respond_to? reflected_association_name.pluralize
|
74
76
|
reflected_members = member.send(reflected_association_name.pluralize)
|
75
77
|
unless reflected_members.include? self
|
data/lib/active_poro/version.rb
CHANGED
data/spec/active_poro_spec.rb
CHANGED
@@ -37,6 +37,21 @@ describe 'ActivePoro' do
|
|
37
37
|
expect(car.driver).to eq(driver)
|
38
38
|
end
|
39
39
|
|
40
|
+
context 'when the car is transferred to another owner/driver' do
|
41
|
+
let(:another_driver){ Driver.new('Bob') }
|
42
|
+
it 'detaches the car from the previous owner' do
|
43
|
+
car.driver = driver
|
44
|
+
expect(driver.car).to eq(car)
|
45
|
+
expect(car.driver).to eq(driver)
|
46
|
+
|
47
|
+
# car changes owner
|
48
|
+
car.driver = another_driver
|
49
|
+
expect(driver.car).to be_nil
|
50
|
+
expect(car.driver).to eq(another_driver)
|
51
|
+
expect(another_driver.car).to eq(car)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
40
55
|
end
|
41
56
|
|
42
57
|
context 'has_many + belongs_to' do
|
data/spec/spec_helper.rb
CHANGED