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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b338750e482aee089da8aadb601c00da369e062f
4
- data.tar.gz: fdf0737739226fec8f4c5b4fa5f62bbac77fefcf
3
+ metadata.gz: 3286adee5f545522ce345124881eef5115a971c7
4
+ data.tar.gz: ae3738aa15aa080e96b0007f7795d84078aafd07
5
5
  SHA512:
6
- metadata.gz: eb82d3cf0f5fb6b78c66bfc64b664cdf39b0d0895116c58a9f138d373b640c4b5985ecf7bc8df9044bf28e7657ccc0e30ced3fa886bb6578e7dd4aa131b9b8d5
7
- data.tar.gz: 6cc328b1058c513a0efab6c355611e3bc169f50301b69ac78328d1c4d94893e9f9ae7990b5adb091fd5bfb1cd7b43ad109a01b199a22edffc15c1329850367ae
6
+ metadata.gz: ec03afae6e91b65a42848405c2b65fb07a7e01b862b8131613f690f4eb67c7aa08c9c882c579f2cdcf99353f7afcb56b51c133902aa54f9e7a7a620f54b85915
7
+ data.tar.gz: fa60eedcaee6d2753a1ca749744cfbcb461808d97b3964ee2c90764d127a5dbf36175753143ff5389fc8c917734ad4858984622ea37e481d1c9c7beb6e313c62
data/README.md CHANGED
@@ -82,6 +82,8 @@ another_dog.fleas
82
82
  #=> [flea_b] # simplified output, not actual output on the console
83
83
  ```
84
84
 
85
+ This also works with has_one and belongs_to as expected.
86
+
85
87
  ## Contributing
86
88
 
87
89
  1. Fork it ( https://github.com/codescrum/active_poro/fork )
@@ -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
- unless member.send(reflected_association_name) == self
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}", (member || nil))
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
- unless member.send(reflected_association_name) == self
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
@@ -1,3 +1,3 @@
1
1
  module ActivePoro
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -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
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require 'pry'
2
3
 
3
4
  ######################
4
5
  require 'active_poro'#
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_poro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Diaz