object_attorney 2.6.1 → 2.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/object_attorney/attribute_assignment.rb +2 -0
- data/lib/object_attorney/nested_objects.rb +7 -2
- data/lib/object_attorney/record.rb +5 -1
- data/lib/object_attorney/representation.rb +19 -5
- data/lib/object_attorney/validations.rb +7 -3
- data/lib/object_attorney/version.rb +1 -1
- data/spec/object_attorney/post_validations_form_spec.rb +1 -1
- data/spec/object_attorney/post_with_comment_validations_form_spec.rb +1 -1
- data/spec/object_attorney/post_with_only_existing_comments_form_spec.rb +38 -0
- data/spec/object_attorney/post_with_only_new_comments_form_spec.rb +42 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/form_objects/post_with_only_existing_comments_form.rb +9 -0
- data/spec/support/form_objects/post_with_only_new_comments_form.rb +9 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2JiOWE3MWRlMDhmY2UwYzA2OTgwYmI4MTI0NDhkMzc4ZTkyNjBjYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDM5ZGQyYzg4Yzg0NTkyY2I3NzY3OWU0YTk0ZGM0MzIyZWU2MDU3MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzFiNGU0Yjg0ODBkYjdjZWUzMzUzOGM5ODAxNDM0NzE5YTY5ODkzMWU1OGEz
|
10
|
+
ZDM1OWNiNjI5NmQ4MjZjYzE5MTM0ZGYxMDc1ZTM1ZDQ5OGU3NzU2NmRmMWZk
|
11
|
+
NTM3ZTQ0ZGUyODM1YjAwNzA4ODE2NzIwNzljNDMxZmFmMjlhYjE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTZkYWY4NmUzMDAxZjBiZmE5MWVjNDdiMGM3YjAzNzFhMzAyZmI1NmRiZDM0
|
14
|
+
ODE1NjcyOWJlZmVlZjYzYTdiYmM5MjljOTNiMjRkM2ViZTk0YjAwNzkxNDk3
|
15
|
+
MjIxNDE2MWY3MDIxZDVhYjcyMzIzYjQ0MGE5NzlhMjAwMTk5ODk=
|
@@ -153,6 +153,8 @@ module ObjectAttorney
|
|
153
153
|
|
154
154
|
def build_nested_object(nested_object_name, attributes = {})
|
155
155
|
reflection = self.class.reflect_on_association(nested_object_name)
|
156
|
+
|
157
|
+
return nil if reflection.options[:no_new_records]
|
156
158
|
|
157
159
|
if can_represented_object_build_nested?(reflection, nested_object_name)
|
158
160
|
new_nested_object = build_from_represented_object(reflection, nested_object_name)
|
@@ -197,9 +199,11 @@ module ObjectAttorney
|
|
197
199
|
def existing_nested_objects(nested_object_name)
|
198
200
|
nested_relection = self.class.reflect_on_association(nested_object_name)
|
199
201
|
|
200
|
-
|
202
|
+
return [] if nested_relection.options[:no_existing_records]
|
203
|
+
|
204
|
+
existing = represented_object.nil? ? (nested_relection.klass.try(:all) || []) : (represented_object.send(nested_object_name) || (nested_relection.has_many? ? [] : nil))
|
201
205
|
|
202
|
-
if represented_object.present? && nested_relection.klass != self.class.represented_object_class.reflect_on_association(nested_object_name).try(:klass)
|
206
|
+
if represented_object.present? && self.class.represented_object_class.respond_to?(:reflect_on_association) && nested_relection.klass != self.class.represented_object_class.reflect_on_association(nested_object_name).try(:klass)
|
203
207
|
if existing.respond_to?(:map)
|
204
208
|
existing = existing.map { |existing_nested_object| nested_relection.klass.new({}, existing_nested_object) }
|
205
209
|
else
|
@@ -225,6 +229,7 @@ module ObjectAttorney
|
|
225
229
|
end
|
226
230
|
|
227
231
|
def accepts_nested_objects(nested_object_name, options = {})
|
232
|
+
options.symbolize_keys!
|
228
233
|
reflection = AssociationReflection.new(nested_object_name, represented_object_reflection, options)
|
229
234
|
|
230
235
|
self.instance_variable_set("@#{nested_object_name}_reflection", reflection)
|
@@ -103,7 +103,11 @@ module ObjectAttorney
|
|
103
103
|
module ClassMethods
|
104
104
|
|
105
105
|
def all(*args)
|
106
|
-
represented_object_class.all
|
106
|
+
if represented_object_class.respond_to?(:all)
|
107
|
+
represented_object_class.all(*args).map { |represented_object| self.new({}, represented_object) }
|
108
|
+
else
|
109
|
+
[]
|
110
|
+
end
|
107
111
|
end
|
108
112
|
|
109
113
|
end
|
@@ -61,12 +61,11 @@ module ObjectAttorney
|
|
61
61
|
|
62
62
|
delegate_properties(*options[:properties], to: represented_object_name) if options.include?(:properties)
|
63
63
|
|
64
|
-
|
64
|
+
initiate_getters(options[:getter], represented_object_name)
|
65
|
+
initiate_getters(options[:getters], represented_object_name)
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
delegate(*writers, to: represented_object_name)
|
69
|
-
end
|
67
|
+
initiate_setters(options[:setter], represented_object_name)
|
68
|
+
initiate_setters(options[:setters], represented_object_name)
|
70
69
|
end
|
71
70
|
|
72
71
|
def represented_object_reflection
|
@@ -83,6 +82,21 @@ module ObjectAttorney
|
|
83
82
|
represented_object_class.reflect_on_association(association)
|
84
83
|
end
|
85
84
|
|
85
|
+
|
86
|
+
private ############### PRIVATE #################
|
87
|
+
|
88
|
+
def initiate_getters(getters, represented_object_name)
|
89
|
+
delegate(*getters, to: represented_object_name) unless getters.nil?
|
90
|
+
end
|
91
|
+
|
92
|
+
def initiate_setters(setters, represented_object_name)
|
93
|
+
return nil if setters.nil?
|
94
|
+
|
95
|
+
setters = [*setters].map { |setter| "#{setter}=" }
|
96
|
+
|
97
|
+
delegate(*setters, to: represented_object_name)
|
98
|
+
end
|
99
|
+
|
86
100
|
end
|
87
101
|
|
88
102
|
end
|
@@ -22,9 +22,9 @@ module ObjectAttorney
|
|
22
22
|
|
23
23
|
def populate_imposed_errors
|
24
24
|
if respond_to?(:represented_object)
|
25
|
-
represented_object.errors.each { |key, value|
|
25
|
+
represented_object.errors.each { |key, value| imposed_errors[key] = value } if Helpers.has_errors_method?(represented_object)
|
26
26
|
else
|
27
|
-
errors.each { |key, value|
|
27
|
+
errors.each { |key, value| imposed_errors[key] = value } if Helpers.has_errors_method?(self)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -35,7 +35,11 @@ module ObjectAttorney
|
|
35
35
|
private #################### PRIVATE METHODS DOWN BELOW ######################
|
36
36
|
|
37
37
|
def load_errors_from(errors)
|
38
|
-
errors.each
|
38
|
+
errors.each do |key, value|
|
39
|
+
[*value].each do |_value|
|
40
|
+
self.errors.add(key, _value) unless self.errors.added?(key, _value)
|
41
|
+
end
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
end
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe PostValidationsForm do
|
4
4
|
|
5
|
-
it "1. 'PostValidationsForm' becomes invalid if 'Post' has errors after the #submit method and incorporates its errors."
|
5
|
+
it "1. 'PostValidationsForm' becomes invalid if 'Post' has errors after the #submit method and incorporates its errors." do
|
6
6
|
params = {
|
7
7
|
post: {
|
8
8
|
title: 'First post',
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe PostWithCommentValidationsForm do
|
4
4
|
|
5
|
-
it "1. 'PostWithCommentValidationsForm' becomes invalid if 'Post' or nested 'Comment's has errors after the #submit method and incorporates its errors."
|
5
|
+
it "1. 'PostWithCommentValidationsForm' becomes invalid if 'Post' or nested 'Comment's has errors after the #submit method and incorporates its errors." do
|
6
6
|
params = {
|
7
7
|
post: {
|
8
8
|
title: 'First post',
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe PostWithOnlyExistingCommentsForm do
|
4
|
+
|
5
|
+
it "1. Editing nested 'Comments' inside a PostForm that only accepts existing Comments changes and ignores new Comments." do
|
6
|
+
params = {
|
7
|
+
id: 1,
|
8
|
+
post: {
|
9
|
+
title: "altered post",
|
10
|
+
comments_attributes: {
|
11
|
+
"0" => { body: "new comment" },
|
12
|
+
"1" => { id: 1, _destroy: true },
|
13
|
+
"2" => { id: 2, body: 'altered comment' }
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
Post.create(title: "My title1")
|
19
|
+
Post.first.title.should == 'My title1'
|
20
|
+
Comment.create(post_id: 1, body: "body1")
|
21
|
+
Comment.create(post_id: 1, body: "body2")
|
22
|
+
Comment.all.count.should == 2
|
23
|
+
|
24
|
+
post_form = PostWithOnlyExistingCommentsForm.new(params[:post], Post.find(params[:id]))
|
25
|
+
post_form.save
|
26
|
+
|
27
|
+
comment = Comment.find_by_id(1)
|
28
|
+
comment.should == nil
|
29
|
+
|
30
|
+
comment = Comment.find_by_id(2)
|
31
|
+
comment.body.should == 'altered comment'
|
32
|
+
|
33
|
+
Comment.all.count.should == 1
|
34
|
+
Post.first.title.should == 'altered post'
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe PostWithOnlyNewCommentsForm do
|
4
|
+
|
5
|
+
it "1. Creating nested 'Comments' inside a PostForm that only accepts new Comments and ignores existing Comments changes." do
|
6
|
+
params = {
|
7
|
+
id: 1,
|
8
|
+
post: {
|
9
|
+
title: "altered post",
|
10
|
+
comments_attributes: {
|
11
|
+
"0" => { body: "new comment" },
|
12
|
+
"1" => { id: 1, _destroy: true },
|
13
|
+
"2" => { id: 2, body: 'altered comment' }
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
Post.create(title: "My title1")
|
19
|
+
Post.first.title.should == 'My title1'
|
20
|
+
Comment.create(post_id: 1, body: "body1")
|
21
|
+
Comment.create(post_id: 1, body: "body2")
|
22
|
+
Comment.all.count.should == 2
|
23
|
+
|
24
|
+
post_form = PostWithOnlyNewCommentsForm.new(params[:post], Post.find(params[:id]))
|
25
|
+
post_form.save
|
26
|
+
|
27
|
+
comment = Comment.find_by_id(1)
|
28
|
+
comment.body.should == 'body1'
|
29
|
+
|
30
|
+
comment = Comment.find_by_id(2)
|
31
|
+
comment.body.should == 'body2'
|
32
|
+
|
33
|
+
comment = Comment.find_by_id(3)
|
34
|
+
comment.body.should == 'new comment'
|
35
|
+
comment.post_id.should == 1
|
36
|
+
|
37
|
+
Comment.all.count.should == 3
|
38
|
+
Post.first.title.should == 'altered post'
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -23,6 +23,8 @@ require 'support/form_objects/comment_form'
|
|
23
23
|
require 'support/form_objects/post_with_comment_form'
|
24
24
|
require 'support/form_objects/post_with_comment_validations_form'
|
25
25
|
require 'support/form_objects/post_with_comments_and_address_form'
|
26
|
+
require 'support/form_objects/post_with_only_new_comments_form'
|
27
|
+
require 'support/form_objects/post_with_only_existing_comments_form'
|
26
28
|
require 'support/form_objects/bulk_posts_form'
|
27
29
|
require 'support/form_objects/bulk_posts_allow_only_existing_form'
|
28
30
|
require 'support/form_objects/bulk_posts_allow_only_new_form'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: object_attorney
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- João Gonçalves
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,6 +97,8 @@ files:
|
|
97
97
|
- spec/object_attorney/post_with_comment_form_spec.rb
|
98
98
|
- spec/object_attorney/post_with_comment_validations_form_spec.rb
|
99
99
|
- spec/object_attorney/post_with_comments_and_address_form_spec.rb
|
100
|
+
- spec/object_attorney/post_with_only_existing_comments_form_spec.rb
|
101
|
+
- spec/object_attorney/post_with_only_new_comments_form_spec.rb
|
100
102
|
- spec/object_attorney/user_form_spec.rb
|
101
103
|
- spec/object_attorney/user_form_with_ruby_errors_spec.rb
|
102
104
|
- spec/spec_helper.rb
|
@@ -112,6 +114,8 @@ files:
|
|
112
114
|
- spec/support/form_objects/post_with_comment_form.rb
|
113
115
|
- spec/support/form_objects/post_with_comment_validations_form.rb
|
114
116
|
- spec/support/form_objects/post_with_comments_and_address_form.rb
|
117
|
+
- spec/support/form_objects/post_with_only_existing_comments_form.rb
|
118
|
+
- spec/support/form_objects/post_with_only_new_comments_form.rb
|
115
119
|
- spec/support/form_objects/user_form.rb
|
116
120
|
- spec/support/form_objects/user_form_with_ruby_errors.rb
|
117
121
|
- spec/support/models/address.rb
|
@@ -154,6 +158,8 @@ test_files:
|
|
154
158
|
- spec/object_attorney/post_with_comment_form_spec.rb
|
155
159
|
- spec/object_attorney/post_with_comment_validations_form_spec.rb
|
156
160
|
- spec/object_attorney/post_with_comments_and_address_form_spec.rb
|
161
|
+
- spec/object_attorney/post_with_only_existing_comments_form_spec.rb
|
162
|
+
- spec/object_attorney/post_with_only_new_comments_form_spec.rb
|
157
163
|
- spec/object_attorney/user_form_spec.rb
|
158
164
|
- spec/object_attorney/user_form_with_ruby_errors_spec.rb
|
159
165
|
- spec/spec_helper.rb
|
@@ -169,6 +175,8 @@ test_files:
|
|
169
175
|
- spec/support/form_objects/post_with_comment_form.rb
|
170
176
|
- spec/support/form_objects/post_with_comment_validations_form.rb
|
171
177
|
- spec/support/form_objects/post_with_comments_and_address_form.rb
|
178
|
+
- spec/support/form_objects/post_with_only_existing_comments_form.rb
|
179
|
+
- spec/support/form_objects/post_with_only_new_comments_form.rb
|
172
180
|
- spec/support/form_objects/user_form.rb
|
173
181
|
- spec/support/form_objects/user_form_with_ruby_errors.rb
|
174
182
|
- spec/support/models/address.rb
|