embedded_associations 4.0.0 → 4.1.0

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: 931459993427be60c6717d86ee0e387148f34b66
4
- data.tar.gz: e73417bff91288ec6b76e3fafa61a92ea74e10ec
3
+ metadata.gz: 76c8b0e4ae9164c343480eb95de82cd07a83c8fe
4
+ data.tar.gz: 04934eb299a9eb501f8f77a8c803bc7715d4925c
5
5
  SHA512:
6
- metadata.gz: 77b9526fdaff3aed1d35ab8a4d7d0e6ea6c2229ec4698c0a41c6fd79bb46d87a400d2c66a1898e177a8705ab94a1e94d79f17449e385b0a38da98f08118daf35
7
- data.tar.gz: 38372d705068862c455f2142a459f093719360af9b8771ccf3597bd1e47e34132dd7af80c53e9ad338efee4df55f4031f9418eebc57041db40e6798d0547c567
6
+ metadata.gz: 8fad90037a4e1e2528772398f851f55230a4f8559eb02d621566ac092c6c9a87509581e71d40756deef82dbc3183146c77095208622d7a75f26e49e630653eeb
7
+ data.tar.gz: 074f845b30f457745ae7976bf8fccadea23e231d0006e8d325daa19418fece68ecdaa033e10e07f4ab875d2ee32438eff88e22849c700c08e6cae12a07f52413
@@ -1,3 +1,3 @@
1
1
  module EmbeddedAssociations
2
- VERSION = "4.0.0"
2
+ VERSION = "4.1.0"
3
3
  end
@@ -87,8 +87,13 @@ module EmbeddedAssociations
87
87
  end
88
88
 
89
89
  definition.each do |name, child_definition|
90
+ if !parent_params || !parent_params.has_key?(name.to_s)
91
+ next
92
+ end
93
+
90
94
  reflection = parent.class.reflect_on_association(name)
91
- attrs = parent_params && parent_params.delete(name.to_s)
95
+
96
+ attrs = parent_params.delete(name.to_s)
92
97
 
93
98
  if reflection.collection?
94
99
  attrs ||= []
@@ -131,7 +136,7 @@ module EmbeddedAssociations
131
136
  current_assoc = parent.send(name)
132
137
 
133
138
  if r = current_assoc
134
- if attrs
139
+ if attrs && attrs != ''
135
140
  attrs = controller.send(:filter_attributes, r.class.name, attrs, :update)
136
141
  handle_resource(child_definition, r, attrs) if child_definition
137
142
  r.assign_attributes(attrs)
@@ -141,7 +146,7 @@ module EmbeddedAssociations
141
146
  run_before_destroy_callbacks(r)
142
147
  r.mark_for_destruction
143
148
  end
144
- elsif attrs
149
+ elsif attrs && attrs != ''
145
150
  r = parent.send("build_#{name}")
146
151
  attrs = controller.send(:filter_attributes, r.class.name, attrs, :create)
147
152
  handle_resource(child_definition, r, attrs) if child_definition
@@ -46,6 +46,16 @@ describe PostsController, type: :controller do
46
46
 
47
47
  Tag.all.each{ |t| expect(t.post).to_not be_nil }
48
48
  end
49
+
50
+ it "should not destory if entire field missing" do
51
+ hash.delete(:tags)
52
+ json = post :update, :id => resource.id, post: hash
53
+
54
+ expect(Post.count).to eq(1)
55
+ expect(Tag.count).to eq(2)
56
+
57
+ Tag.all.each{ |t| expect(t.post).to_not be_nil }
58
+ end
49
59
 
50
60
  it "should update modified child records" do
51
61
  hash[:tags].first[:name] = 'modified'
@@ -104,8 +114,8 @@ describe PostsController, type: :controller do
104
114
 
105
115
  let(:resource) { Post.create(category: Category.create(name: 'ember')) }
106
116
 
107
- it "should destroy nil child record" do
108
- hash[:category] = nil
117
+ it "should destroy blank child record" do
118
+ hash[:category] = ''
109
119
  json = post :update, :id => resource.id, post: hash
110
120
 
111
121
  expect(Post.count).to eq(1)
@@ -115,6 +125,14 @@ describe PostsController, type: :controller do
115
125
 
116
126
  expect(resource.category).to be_nil
117
127
  end
128
+
129
+ it "should not destroy missing child field" do
130
+ hash.delete(:category)
131
+ json = post :update, :id => resource.id, post: hash
132
+
133
+ expect(Post.count).to eq(1)
134
+ expect(Category.count).to eq(1)
135
+ end
118
136
 
119
137
  it "should update modified child records" do
120
138
  hash[:category][:name] = 'ember-data'
@@ -174,8 +192,8 @@ describe PostsController, type: :controller do
174
192
 
175
193
  let(:resource) { Post.create({user: User.create({name: 'G$', account: Account.create})}) }
176
194
 
177
- it "should destroy nil child hierarchy" do
178
- hash[:user] = nil
195
+ it "should destroy blank child hierarchy" do
196
+ hash[:user] = ''
179
197
  json = post :update, :id => resource.id, post: hash
180
198
 
181
199
  expect(Post.count).to eq(1)
@@ -187,8 +205,8 @@ describe PostsController, type: :controller do
187
205
  expect(resource.user).to be_nil
188
206
  end
189
207
 
190
- it "should destroy nil grand-child" do
191
- hash[:user] = {name: 'G$'}
208
+ it "should destroy blank grand-child" do
209
+ hash[:user] = {name: 'G$', account: ''}
192
210
  json = post :update, :id => resource.id, post: hash
193
211
 
194
212
  expect(Post.count).to eq(1)
@@ -199,6 +217,16 @@ describe PostsController, type: :controller do
199
217
 
200
218
  expect(resource.user.account).to be_nil
201
219
  end
220
+
221
+ it "should not destroy missing grand-child" do
222
+ hash[:user] = {name: 'G$'}
223
+ json = post :update, :id => resource.id, post: hash
224
+
225
+ expect(Post.count).to eq(1)
226
+ expect(User.count).to eq(1)
227
+ expect(Account.count).to eq(1)
228
+ end
229
+
202
230
 
203
231
  it "should update modified child records" do
204
232
  hash[:user][:name] = 'wes'
@@ -230,7 +258,7 @@ describe PostsController, type: :controller do
230
258
 
231
259
  context "creating" do
232
260
 
233
- it "should create hierarchy", focus: true do
261
+ it "should create hierarchy" do
234
262
  json = post :create, post: {
235
263
  title: 'ma post',
236
264
  comments: [{user: {name: 'G$', account: {}}}]
@@ -280,8 +308,9 @@ describe PostsController, type: :controller do
280
308
  p
281
309
  }
282
310
 
283
- it "should destroy nil child hierarchy" do
284
- hash[:comments] = nil
311
+ it "should destroy blank child hierarchy" do
312
+ hash[:comments] = []
313
+ hash[:user] = ''
285
314
  json = post :update, :id => resource.id, post: hash
286
315
 
287
316
  expect(Post.count).to eq(1)
@@ -294,8 +323,8 @@ describe PostsController, type: :controller do
294
323
  expect(resource.comments).to be_empty
295
324
  end
296
325
 
297
- it "should destroy nil grand-child hierarchy" do
298
- hash[:comments].first[:user] = nil
326
+ it "should destroy blank grand-child hierarchy" do
327
+ hash[:comments].first[:user] = ''
299
328
  json = post :update, :id => resource.id, post: hash
300
329
 
301
330
  expect(Post.count).to eq(1)
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embedded_associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gordon L. Hempton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2014-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>'
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>'
24
+ - - ">"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.0.0
27
27
  description: ActiveRecord controller-level support for embedded associations
@@ -31,8 +31,8 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - .gitignore
35
- - .travis.yml
34
+ - ".gitignore"
35
+ - ".travis.yml"
36
36
  - Gemfile
37
37
  - LICENSE.txt
38
38
  - README.md
@@ -97,17 +97,17 @@ require_paths:
97
97
  - lib
98
98
  required_ruby_version: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - '>='
105
+ - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
109
  rubyforge_project:
110
- rubygems_version: 2.0.14
110
+ rubygems_version: 2.2.2
111
111
  signing_key:
112
112
  specification_version: 4
113
113
  summary: ActiveRecord controller-level support for embedded associations