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 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