embedded_associations 4.1.1 → 4.1.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: f6d41192bb48a2704dbc2356512872935acac014
4
- data.tar.gz: eee1b040f3c264e88ab493fca6f18a8c63231857
3
+ metadata.gz: a3effa8457a2ccc4e44fdefbc2ad1ef44fd4089e
4
+ data.tar.gz: f9d66cb68fa8531fef3ec954266b6d85a56a09f2
5
5
  SHA512:
6
- metadata.gz: 3cc1b91d346d294d8368ba4a2e78724c47294072613896f0e5e4f60c571bcaf6520641bbd188c6d3ae80930ee9909d6e5e9136727d7bdccfbcb1fac37092eba1
7
- data.tar.gz: 595ab5ab518d466eb4227d28c0d47781e588ee2b377fdd89c61d558dfa7c8f5d41095745902407d92c4cabbebe75e093aea4fb1565ff1d429d4cef6e8e038a85
6
+ metadata.gz: 9ea8022101eec7659c39b09fdef7a8cc27192347f97a0c5e91176a1cdc2904846dca0f7c8383d8efb60bbfdf4809adb40358abe6129bd3c1bede626c3c66c649
7
+ data.tar.gz: 28f019c864eedb7f1580c3d817290cccc04cac5b2a2c7d37383c6f26ed4c8ee73f0fcbdd5aaf959a4201b64bb0495de80f1b26e0c073bf25512e8613ff31009e
data/Gemfile CHANGED
@@ -3,9 +3,9 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :test do
6
- gem 'rails', '4.0.2'
6
+ gem 'rails', '~> 4.2'
7
7
  gem 'sqlite3'
8
- gem 'active_model_serializers'
8
+ gem 'active_model_serializers', git: 'https://github.com/getoutreach/active_model_serializers.git'
9
9
 
10
10
  gem 'rspec'
11
11
  gem 'rspec-rails'
@@ -118,10 +118,13 @@ module EmbeddedAssociations
118
118
  if id = attrs['id']
119
119
  # can't use current_assoc.find(id), see http://stackoverflow.com/questions/11605120/autosave-ignored-on-has-many-relation-what-am-i-missing
120
120
  r = current_assoc.find{|r| r.id == id.to_i}
121
- attrs = controller.send(:filter_attributes, r.class.name, attrs, :update)
122
- handle_resource(child_definition, r, attrs) if child_definition
123
- r.assign_attributes(attrs)
124
- run_before_update_callbacks(r)
121
+
122
+ if r
123
+ attrs = controller.send(:filter_attributes, r.class.name, attrs, :update)
124
+ handle_resource(child_definition, r, attrs) if child_definition
125
+ r.assign_attributes(attrs)
126
+ run_before_update_callbacks(r)
127
+ end
125
128
  else
126
129
  inheritance_column = parent.class.reflect_on_association(name).klass.inheritance_column
127
130
  # need to pass in inheritance column in build to get correct class
@@ -1,3 +1,3 @@
1
1
  module EmbeddedAssociations
2
- VERSION = "4.1.1"
2
+ VERSION = "4.1.2"
3
3
  end
@@ -31,6 +31,7 @@ describe PostsController, type: :controller do
31
31
  hash[:tags] += [{},{}]
32
32
  json = post :update, :id => resource.id, post: hash
33
33
 
34
+ expect(json.response_code).to eq(200)
34
35
  expect(Post.count).to eq(1)
35
36
  expect(Tag.count).to eq(4)
36
37
 
@@ -41,6 +42,7 @@ describe PostsController, type: :controller do
41
42
  hash[:tags] = hash[:tags].take(1)
42
43
  json = post :update, :id => resource.id, post: hash
43
44
 
45
+ expect(json.response_code).to eq(200)
44
46
  expect(Post.count).to eq(1)
45
47
  expect(Tag.count).to eq(1)
46
48
 
@@ -51,6 +53,7 @@ describe PostsController, type: :controller do
51
53
  hash.delete(:tags)
52
54
  json = post :update, :id => resource.id, post: hash
53
55
 
56
+ expect(json.response_code).to eq(200)
54
57
  expect(Post.count).to eq(1)
55
58
  expect(Tag.count).to eq(2)
56
59
 
@@ -61,6 +64,7 @@ describe PostsController, type: :controller do
61
64
  hash[:tags].first[:name] = 'modified'
62
65
  json = post :update, :id => resource.id, post: hash
63
66
 
67
+ expect(json.response_code).to eq(200)
64
68
  expect(Post.count).to eq(1)
65
69
  expect(Tag.count).to eq(2)
66
70
 
@@ -69,8 +73,33 @@ describe PostsController, type: :controller do
69
73
  Tag.all.each{ |t| expect(t.post).to_not be_nil }
70
74
  end
71
75
 
72
- end
76
+ it "should ignore missing child records" do
77
+ hash[:tags].first[:name] = "modified"
78
+ hash[:tags] += [{ id: 0, name: "foo" }]
79
+ json = post :update, :id => resource.id, post: hash
80
+
81
+ expect(json.response_code).to eq(200)
82
+ expect(Post.count).to eq(1)
83
+ expect(Tag.count).to eq(2)
84
+
85
+ expect(Tag.first.name).to eq("modified")
86
+ end
73
87
 
88
+ context "with a named tag and a uniqueness constraint" do
89
+ let(:tags) {[ Tag.create(name: "foo") ]}
90
+
91
+ it "should require an ID to supply existing records" do
92
+ json = post :update, id: resource.id, post: hash.merge(tags: [{ name: "foo" }])
93
+ expect(json.response_code).to eq(422)
94
+
95
+ json = post :update, id: resource.id, post: hash.merge(tags: [{ id: tags[0].id, name: "foo" }])
96
+ expect(json.response_code).to eq(200)
97
+ expect(Post.count).to eq(1)
98
+ expect(Tag.count).to eq(1)
99
+ expect(Tag.first.name).to eq("foo")
100
+ end
101
+ end
102
+ end
74
103
  end
75
104
 
76
105
  describe "embedded belongs_to" do
@@ -11,15 +11,21 @@ class PostsController < ApplicationController
11
11
  def create
12
12
  params = post_params
13
13
  handle_embedded_associations(resource, params)
14
- resource.update_attributes(params)
15
- render json: resource
14
+ if resource.update_attributes(params)
15
+ render json: resource
16
+ else
17
+ render json: {}, status: 422
18
+ end
16
19
  end
17
20
 
18
21
  def update
19
22
  params = post_params
20
23
  handle_embedded_associations(resource, params)
21
- resource.update_attributes(params)
22
- render json: resource
24
+ if resource.update_attributes(params)
25
+ render json: resource
26
+ else
27
+ render json: {}, status: 422
28
+ end
23
29
  end
24
30
 
25
31
  def destroy
@@ -46,7 +52,7 @@ class PostsController < ApplicationController
46
52
  :title,
47
53
  comments: [:content, user: [:name, :email, account: [:note] ]],
48
54
  user: [:type, :name, :email, account: [:note] ],
49
- tags: [:name],
55
+ tags: [:id, :name],
50
56
  category: [:name]
51
57
  )
52
58
  end
@@ -1,3 +1,5 @@
1
1
  class Tag < ActiveRecord::Base
2
2
  belongs_to :post
3
+
4
+ validates :name, uniqueness: true, allow_blank: true
3
5
  end
@@ -22,9 +22,6 @@ App::Application.configure do
22
22
  # Only use best-standards-support built into browsers
23
23
  config.action_dispatch.best_standards_support = :builtin
24
24
 
25
- # Raise exception on mass assignment protection for Active Record models
26
- config.active_record.mass_assignment_sanitizer = :strict
27
-
28
25
  # Log the query plan for queries taking more than this (works
29
26
  # with SQLite, MySQL, and PostgreSQL)
30
27
  config.active_record.auto_explain_threshold_in_seconds = 0.5
@@ -29,9 +29,6 @@ App::Application.configure do
29
29
  # ActionMailer::Base.deliveries array.
30
30
  config.action_mailer.delivery_method = :test
31
31
 
32
- # Raise exception on mass assignment protection for Active Record models
33
- config.active_record.mass_assignment_sanitizer = :strict
34
-
35
32
  # Print deprecation notices to the stderr
36
33
  config.active_support.deprecation = :stderr
37
34
  end
@@ -6,7 +6,7 @@ module SerializationHelpers
6
6
  def serialize(model, root=false)
7
7
  options = {}
8
8
  options[:root] = false unless root
9
- params = model.active_model_serializer.new(model, options).as_json
9
+ params = ActiveModel::Serializer.serializer_for(model).new(model, options).as_json
10
10
  params[:id] = model.id if root
11
11
  params
12
12
  end
@@ -15,4 +15,4 @@ module SerializationHelpers
15
15
  arr.map(&method(:serialize))
16
16
  end
17
17
 
18
- end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embedded_associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 4.1.2
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-10-22 00:00:00.000000000 Z
11
+ date: 2017-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  version: '0'
111
111
  requirements: []
112
112
  rubyforge_project:
113
- rubygems_version: 2.2.2
113
+ rubygems_version: 2.5.2
114
114
  signing_key:
115
115
  specification_version: 4
116
116
  summary: ActiveRecord controller-level support for embedded associations