object_attorney 2.10.7 → 2.10.9
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 +8 -8
- data/console.rb +17 -0
- data/lib/object_attorney/attribute_assignment.rb +21 -1
- data/lib/object_attorney/nested_objects.rb +11 -9
- data/lib/object_attorney/version.rb +1 -1
- data/spec/object_attorney/address_form_spec.rb +19 -0
- data/spec/object_attorney/test_spec.rb +23 -0
- data/spec/require_helper.rb +32 -0
- data/spec/spec_helper.rb +2 -1
- data/spec/support/form_objects/address_form.rb +9 -0
- metadata +12 -3
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
ZTZjYmJlOTBjNzg4MWNmZTUxMTI2MzZjZGFkZmE4NTlhOTMxNjUyNg==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
YjdiNzA3MTlhMDMxYjZlNzM0NmFjMDMzMzdiYTMzNmRiZGYwZGFjZQ==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NDEyY2NmYTM0ODVkMjA2NDZkMWJhZWFiYTBmMjFmODVmNmIzZWQ0NDc3MGRm
|
|
10
|
+
YjhkZWVmNjFhZTc5NGUxMThlNDI2Njg2NDRjODQ0MTA1ZDNlNmYzZmFmYTE0
|
|
11
|
+
ZDc4NTUwN2M0YjI2ZGNjZWU1MGRhMTg4MjYyMzVkYmQzNDFlYTk=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
OTFkNjY0NmNkNzZmYzU4NjIwMGM1NDgxYTNiMjZlYzU0OTY2ZDU4MTM5OGRj
|
|
14
|
+
NjNiZTU2NDI1OWMzN2MyMGFiNjAyODhmMDVkMzY0NTZmZGU0Yjg2MWMxYzA0
|
|
15
|
+
MWUwM2UyYTBlNmNiOGVjMjc2ZTBhNzBlNGU4YmNkNTZhODEwYmE=
|
data/console.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$LOAD_PATH << './'
|
|
4
|
+
$LOAD_PATH << './lib'
|
|
5
|
+
|
|
6
|
+
require 'spec/require_helper'
|
|
7
|
+
|
|
8
|
+
address_attributes = {
|
|
9
|
+
street: 'street',
|
|
10
|
+
city: 'city'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
p = PostWithCommentsAndAddressForm.new(address_attributes: address_attributes)
|
|
14
|
+
|
|
15
|
+
a = AddressForm.new(post_attributes: { title: 'asd', body: 'body' })
|
|
16
|
+
|
|
17
|
+
binding.pry
|
|
@@ -6,6 +6,7 @@ module ObjectAttorney
|
|
|
6
6
|
return if attributes.blank?
|
|
7
7
|
|
|
8
8
|
attributes.each do |name, value|
|
|
9
|
+
name, value = check_for_hidden_nested_attributes(name, value)
|
|
9
10
|
send("#{name}=", value) if allowed_attribute(name)
|
|
10
11
|
end
|
|
11
12
|
|
|
@@ -14,6 +15,25 @@ module ObjectAttorney
|
|
|
14
15
|
|
|
15
16
|
protected #################### PROTECTED METHODS DOWN BELOW ######################
|
|
16
17
|
|
|
18
|
+
def check_for_hidden_nested_attributes(name, value)
|
|
19
|
+
name_sym = name.to_sym
|
|
20
|
+
|
|
21
|
+
reflection = self.class.reflect_on_association(name_sym)
|
|
22
|
+
|
|
23
|
+
if reflection
|
|
24
|
+
if reflection.has_many? && value.is_a?(Array)
|
|
25
|
+
hash = {}
|
|
26
|
+
value.each_with_index do |_value, index|
|
|
27
|
+
hash[index.to_s] = _value
|
|
28
|
+
end
|
|
29
|
+
value = hash
|
|
30
|
+
end
|
|
31
|
+
name = "#{name}_attributes"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
[name, value]
|
|
35
|
+
end
|
|
36
|
+
|
|
17
37
|
def parsing_arguments(attributes, object)
|
|
18
38
|
if !attributes.is_a?(Hash) && object.blank?
|
|
19
39
|
object = attributes
|
|
@@ -21,7 +41,7 @@ module ObjectAttorney
|
|
|
21
41
|
end
|
|
22
42
|
|
|
23
43
|
attributes = {} if attributes.blank?
|
|
24
|
-
|
|
44
|
+
|
|
25
45
|
[attributes.symbolize_keys, object]
|
|
26
46
|
end
|
|
27
47
|
|
|
@@ -48,7 +48,7 @@ module ObjectAttorney
|
|
|
48
48
|
|
|
49
49
|
def save_or_destroy_nested_objects(save_method, association_macro)
|
|
50
50
|
nested_objects(association_macro).map do |reflection, nested_object|
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
populate_foreign_key(self, nested_object, reflection, :has_many)
|
|
53
53
|
populate_foreign_key(self, nested_object, reflection, :has_one)
|
|
54
54
|
|
|
@@ -73,7 +73,7 @@ module ObjectAttorney
|
|
|
73
73
|
|
|
74
74
|
def get_attributes_for_existing(nested_object_name, existing_nested_object)
|
|
75
75
|
attributes = send("#{nested_object_name}_attributes")
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
if attributes.present?
|
|
78
78
|
(attributes.values.select { |x| x[:id].to_i == existing_nested_object.id }.first || {}).symbolize_keys
|
|
79
79
|
else
|
|
@@ -134,7 +134,7 @@ module ObjectAttorney
|
|
|
134
134
|
|
|
135
135
|
def get_existing_and_new_nested_objects(nested_object_name)
|
|
136
136
|
existing_and_new_nested_objects = []
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
update_existing_nested_objects(existing_and_new_nested_objects, nested_object_name)
|
|
139
139
|
build_new_nested_objects(existing_and_new_nested_objects, nested_object_name)
|
|
140
140
|
|
|
@@ -169,7 +169,7 @@ module ObjectAttorney
|
|
|
169
169
|
reflection = self.class.reflect_on_association(nested_object_name)
|
|
170
170
|
|
|
171
171
|
return nil if reflection.options[:new_records] == false
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
if new_nested_object.present?
|
|
174
174
|
new_nested_object = assign_attributes_or_build_nested_object(reflection, attributes, new_nested_object)
|
|
175
175
|
|
|
@@ -200,7 +200,7 @@ module ObjectAttorney
|
|
|
200
200
|
|
|
201
201
|
def can_represented_object_build_nested?(reflection, nested_object_name)
|
|
202
202
|
return false if represented_object.blank?
|
|
203
|
-
|
|
203
|
+
|
|
204
204
|
represented_object.respond_to?("build_#{nested_object_name}") || represented_object.send(nested_object_name).respond_to?(:build)
|
|
205
205
|
end
|
|
206
206
|
|
|
@@ -218,18 +218,18 @@ module ObjectAttorney
|
|
|
218
218
|
nested_relection = self.class.reflect_on_association(nested_object_name)
|
|
219
219
|
|
|
220
220
|
return [] if nested_relection.options[:existing_records] == false
|
|
221
|
-
|
|
221
|
+
|
|
222
222
|
if nested_relection.options[:standalone] == true
|
|
223
223
|
return nested_relection.has_many? ? (nested_relection.klass.try(:all) || []) : nil
|
|
224
224
|
end
|
|
225
225
|
|
|
226
226
|
existing = represented_object.nil? ? (nested_relection.klass.try(:all) || []) : (represented_object.send(nested_object_name) || (nested_relection.has_many? ? [] : nil))
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
if represented_object.present?
|
|
229
229
|
if self.class.represented_object_class.respond_to?(:reflect_on_association)
|
|
230
230
|
existing = _existing_in_form_objects(existing, nested_relection) if nested_relection.klass != self.class.represented_object_class.reflect_on_association(nested_object_name).try(:klass)
|
|
231
231
|
else
|
|
232
|
-
existing = _existing_in_form_objects(existing, nested_relection)
|
|
232
|
+
existing = _existing_in_form_objects(existing, nested_relection)
|
|
233
233
|
end
|
|
234
234
|
end
|
|
235
235
|
|
|
@@ -239,8 +239,10 @@ module ObjectAttorney
|
|
|
239
239
|
def _existing_in_form_objects(existing, nested_relection)
|
|
240
240
|
if existing.respond_to?(:map)
|
|
241
241
|
existing.map { |existing_nested_object| nested_relection.klass.new({}, existing_nested_object) }
|
|
242
|
-
|
|
242
|
+
elsif existing.present?
|
|
243
243
|
nested_relection.klass.new({}, existing)
|
|
244
|
+
else
|
|
245
|
+
nil
|
|
244
246
|
end
|
|
245
247
|
end
|
|
246
248
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe AddressForm do
|
|
4
|
+
|
|
5
|
+
it "FormObject with a belongs_to with a differente class then the represented_object's relation" do
|
|
6
|
+
params = {
|
|
7
|
+
address: {
|
|
8
|
+
post_attributes: { title: 'asd', body: 'body' }
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
address_form = AddressForm.new(params[:address])
|
|
13
|
+
|
|
14
|
+
address_form.address.post.should == nil
|
|
15
|
+
address_form.post
|
|
16
|
+
address_form.address.post.should_not == nil
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe UserForm do
|
|
4
|
+
|
|
5
|
+
it "..." do
|
|
6
|
+
params = {
|
|
7
|
+
user: {
|
|
8
|
+
email: 'email@gmail.com',
|
|
9
|
+
address: { street: "street1" },
|
|
10
|
+
comments: [
|
|
11
|
+
{ body: "body1" },
|
|
12
|
+
{ body: "body2" }
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
user_form = UserAndCommentsForm.new(params[:user])
|
|
18
|
+
|
|
19
|
+
expect(user_form.address.nil?).to eq(false)
|
|
20
|
+
expect(user_form.comments.length).to eq(2)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
|
|
4
|
+
require 'bundler'
|
|
5
|
+
Bundler.setup
|
|
6
|
+
require 'rspec'
|
|
7
|
+
require 'pry'
|
|
8
|
+
#require 'database_cleaner'
|
|
9
|
+
|
|
10
|
+
require 'object_attorney'
|
|
11
|
+
require 'support/database_setup'
|
|
12
|
+
require 'support/active_model/validations'
|
|
13
|
+
require 'support/models/address'
|
|
14
|
+
require 'support/models/comment'
|
|
15
|
+
require 'support/models/post'
|
|
16
|
+
require 'support/models/user'
|
|
17
|
+
|
|
18
|
+
require 'support/form_objects/post_form'
|
|
19
|
+
require 'support/form_objects/address_form'
|
|
20
|
+
require 'support/form_objects/post_validations_form'
|
|
21
|
+
require 'support/form_objects/comment_form'
|
|
22
|
+
require 'support/form_objects/post_with_comment_form'
|
|
23
|
+
require 'support/form_objects/post_with_comment_validations_form'
|
|
24
|
+
require 'support/form_objects/post_with_comments_and_address_form'
|
|
25
|
+
require 'support/form_objects/post_with_only_new_comments_form'
|
|
26
|
+
require 'support/form_objects/post_with_only_existing_comments_form'
|
|
27
|
+
require 'support/form_objects/bulk_posts_form'
|
|
28
|
+
require 'support/form_objects/bulk_posts_allow_only_existing_form'
|
|
29
|
+
require 'support/form_objects/bulk_posts_allow_only_new_form'
|
|
30
|
+
require 'support/form_objects/bulk_posts_with_form_objects_form'
|
|
31
|
+
require 'support/form_objects/user_and_comments_form'
|
|
32
|
+
require 'support/form_objects/user_form'
|
data/spec/spec_helper.rb
CHANGED
|
@@ -18,6 +18,7 @@ require 'support/models/post'
|
|
|
18
18
|
require 'support/models/user'
|
|
19
19
|
|
|
20
20
|
require 'support/form_objects/post_form'
|
|
21
|
+
require 'support/form_objects/address_form'
|
|
21
22
|
require 'support/form_objects/post_validations_form'
|
|
22
23
|
require 'support/form_objects/comment_form'
|
|
23
24
|
require 'support/form_objects/post_with_comment_form'
|
|
@@ -35,7 +36,7 @@ require 'support/form_objects/user_form'
|
|
|
35
36
|
RSpec.configure do |config|
|
|
36
37
|
#config.treat_symbols_as_metadata_keys_with_true_values = true
|
|
37
38
|
#config.filter_run :current
|
|
38
|
-
|
|
39
|
+
|
|
39
40
|
I18n.enforce_available_locales = false
|
|
40
41
|
|
|
41
42
|
# see: http://iain.nl/testing-activerecord-in-isolation
|
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.10.
|
|
4
|
+
version: 2.10.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-07-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -67,6 +67,7 @@ files:
|
|
|
67
67
|
- LICENSE.txt
|
|
68
68
|
- README.md
|
|
69
69
|
- Rakefile
|
|
70
|
+
- console.rb
|
|
70
71
|
- db/migrate/20131205114000_create_users.rb
|
|
71
72
|
- db/migrate/20131205114900_create_posts.rb
|
|
72
73
|
- db/migrate/20131205114901_create_comments.rb
|
|
@@ -89,6 +90,7 @@ files:
|
|
|
89
90
|
- lib/object_attorney/version.rb
|
|
90
91
|
- not_used/nested_uniqueness_validator.rb
|
|
91
92
|
- object_attorney.gemspec
|
|
93
|
+
- spec/object_attorney/address_form_spec.rb
|
|
92
94
|
- spec/object_attorney/bulk_post_form_spec.rb
|
|
93
95
|
- spec/object_attorney/bulk_posts_allow_only_existing_form_spec.rb
|
|
94
96
|
- spec/object_attorney/bulk_posts_allow_only_new_form_spec.rb
|
|
@@ -103,11 +105,14 @@ files:
|
|
|
103
105
|
- spec/object_attorney/post_with_only_existing_comments_form_spec.rb
|
|
104
106
|
- spec/object_attorney/post_with_only_new_comments_form_spec.rb
|
|
105
107
|
- spec/object_attorney/serialization_spec.rb
|
|
108
|
+
- spec/object_attorney/test_spec.rb
|
|
106
109
|
- spec/object_attorney/user_and_comments_form_spec.rb
|
|
107
110
|
- spec/object_attorney/user_form_spec.rb
|
|
111
|
+
- spec/require_helper.rb
|
|
108
112
|
- spec/spec_helper.rb
|
|
109
113
|
- spec/support/active_model/validations.rb
|
|
110
114
|
- spec/support/database_setup.rb
|
|
115
|
+
- spec/support/form_objects/address_form.rb
|
|
111
116
|
- spec/support/form_objects/bulk_posts_allow_only_existing_form.rb
|
|
112
117
|
- spec/support/form_objects/bulk_posts_allow_only_new_form.rb
|
|
113
118
|
- spec/support/form_objects/bulk_posts_form.rb
|
|
@@ -146,13 +151,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
146
151
|
version: '0'
|
|
147
152
|
requirements: []
|
|
148
153
|
rubyforge_project:
|
|
149
|
-
rubygems_version: 2.
|
|
154
|
+
rubygems_version: 2.2.2
|
|
150
155
|
signing_key:
|
|
151
156
|
specification_version: 4
|
|
152
157
|
summary: This gem allows you to extract the code responsible for 'validations', 'nested
|
|
153
158
|
objects' and 'strong parameters' from your model onto a specific class for a specific
|
|
154
159
|
use case.
|
|
155
160
|
test_files:
|
|
161
|
+
- spec/object_attorney/address_form_spec.rb
|
|
156
162
|
- spec/object_attorney/bulk_post_form_spec.rb
|
|
157
163
|
- spec/object_attorney/bulk_posts_allow_only_existing_form_spec.rb
|
|
158
164
|
- spec/object_attorney/bulk_posts_allow_only_new_form_spec.rb
|
|
@@ -167,11 +173,14 @@ test_files:
|
|
|
167
173
|
- spec/object_attorney/post_with_only_existing_comments_form_spec.rb
|
|
168
174
|
- spec/object_attorney/post_with_only_new_comments_form_spec.rb
|
|
169
175
|
- spec/object_attorney/serialization_spec.rb
|
|
176
|
+
- spec/object_attorney/test_spec.rb
|
|
170
177
|
- spec/object_attorney/user_and_comments_form_spec.rb
|
|
171
178
|
- spec/object_attorney/user_form_spec.rb
|
|
179
|
+
- spec/require_helper.rb
|
|
172
180
|
- spec/spec_helper.rb
|
|
173
181
|
- spec/support/active_model/validations.rb
|
|
174
182
|
- spec/support/database_setup.rb
|
|
183
|
+
- spec/support/form_objects/address_form.rb
|
|
175
184
|
- spec/support/form_objects/bulk_posts_allow_only_existing_form.rb
|
|
176
185
|
- spec/support/form_objects/bulk_posts_allow_only_new_form.rb
|
|
177
186
|
- spec/support/form_objects/bulk_posts_form.rb
|