jsonapi_compliable 0.10.1 → 0.10.2

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: 1383cab9b58c9423dba85c223fbe3c18bc099c9e
4
- data.tar.gz: 0dad7f4689a52a9f22df16ca7e60c41c752f1951
3
+ metadata.gz: 683efd67df594517b01f5b4d42ac9ec7763c8b43
4
+ data.tar.gz: dbdb64eb9a35dd750cb3baaa64bd6d43140126fb
5
5
  SHA512:
6
- metadata.gz: fdbd9dd65460c70ff0b7ce3ae2d48acfa39cdba20419f33467f651fcd475f8f04d71964d0739a08b7b12317f470dfbb54e3c9fe5d20be1912b776d69fd5bd5cb
7
- data.tar.gz: 577ba99d7b29b420121d3d84f53f99b0eb723831bbf4dd31a7d0f1e54dbb57670d5e7d2342e9e9d96284c6f7451c41a7bdc54da31806b89cf850bb30d79adfd1
6
+ metadata.gz: 5ecc62dc5d64239da53005213e9e28fc846580e377264ffbaef7beb6a5e945d5a67132cd1c64c01eafec3187ed7d81cd8287e312059bb7f439078c9456f38c0f
7
+ data.tar.gz: 2c67bd4923faee105de161daea829162fa2ba48a49cbe1f17e18893c58e05a7baa13797ea704d0954d9e33417bb28065ca091bfff3e13e0bab48211116ae7c45
@@ -73,11 +73,14 @@ module JsonapiCompliable
73
73
  # @see Adapters::Abstract#associate
74
74
  def associate(parent, child, association_name, association_type)
75
75
  if association_type == :has_many
76
- parent.association(association_name).loaded!
77
- parent.association(association_name).add_to_target(child, :skip_callbacks)
76
+ associate_many(parent, child, association_name)
78
77
  elsif association_type == :habtm
79
- parent.send(association_name) << child
80
- else
78
+ if parent.send(association_name).exists?(child.id)
79
+ associate_many(parent, child, association_name)
80
+ else
81
+ parent.send(association_name) << child
82
+ end
83
+ elsif
81
84
  child.send("#{association_name}=", parent)
82
85
  end
83
86
  end
@@ -113,6 +116,13 @@ module JsonapiCompliable
113
116
  instance.destroy
114
117
  instance
115
118
  end
119
+
120
+ private
121
+
122
+ def associate_many(parent, child, association_name)
123
+ parent.association(association_name).loaded!
124
+ parent.association(association_name).add_to_target(child, :skip_callbacks)
125
+ end
116
126
  end
117
127
  end
118
128
  end
@@ -95,13 +95,14 @@ class JsonapiCompliable::Util::Persistence
95
95
  end
96
96
 
97
97
  def associate_children(object, children)
98
- # No need to associate destroyed objects
99
- return if @meta[:method] == :destroy
100
-
101
98
  children.each do |x|
102
99
  if x[:object] && object
103
100
  if x[:meta][:method] == :disassociate
104
101
  x[:sideload].disassociate(object, x[:object])
102
+ elsif x[:meta][:method] == :destroy
103
+ if x[:sideload].type == :habtm
104
+ x[:sideload].disassociate(object, x[:object])
105
+ end # otherwise, no need to disassociate destroyed objects
105
106
  else
106
107
  x[:sideload].associate(object, x[:object])
107
108
  end
@@ -1,3 +1,3 @@
1
1
  module JsonapiCompliable
2
- VERSION = "0.10.1"
2
+ VERSION = "0.10.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_compliable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-10-03 00:00:00.000000000 Z
12
+ date: 2017-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jsonapi-serializable