active_poro 0.0.2 → 0.0.3
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.
- 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