object_attorney 2.5.9 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDljMzMxODgxODg3MjU0NGFlMjlkZmQyN2Y4M2ZmODBkMGNlMDZlYw==
4
+ ZGFkZjIwNjQ2MzM4NmU5YTYxZGU3ODViMWIwNGM5YzY5NmVhYzVjOA==
5
5
  data.tar.gz: !binary |-
6
- Y2QzZTVlNzQ2OGJlYWFlYjM1ZDcxYTYyZTZkM2ZlYzJmMzJmNmJlYw==
6
+ NzIzNGI4MzI1ZmRlZGQxMTM2ZWQwNDk0ZWUzN2M0MTkwZGUwMDFiMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZThjMDNjMDVhMzIyYzI0ZDg0NjJmNzQ2N2NiZDVkNGI4ODE5NjgwYmY4ZDdh
10
- MzNiYWM1MzUwYWI4YWI3MGRiMjdhNjRmNzlkZDQ4NmU5ZWZjOTY1Yjg2Y2Q1
11
- MTQyMzEyYmQyZmI1M2FlYjFkZWNhNmNlOGY3ZTUxOTc1MWNmZmQ=
9
+ ZmQ5ZjQ5YTFhYjgzYmJiZTIyYjM0MzI1MjNmYjg0NmViYjk5MmJlMDYwMGRi
10
+ OGFjYmQ2MTNlZjUxMTIyNTJmOTgwODhiNGMyMWQ3ZmNhMDI3NmY2MGE0Y2Y4
11
+ ZjIzNjg2YzE1MjFhODdmM2VlM2ZlYWEzZWRiY2M5NTExN2U4NmI=
12
12
  data.tar.gz: !binary |-
13
- MjA5Nzg0MmNmNjVhMzRkZWQ0OTdjMWFjZTc0NmEwN2U0ZmEzZTg3NTc5Nzgw
14
- Zjg3ZWViMWEzMjhiMDZkNTcxNWYzMTBmY2JjNjY1ZjRlZDkxYmM0ZjBlNmVj
15
- Mjk2Y2Q4ZWNiYWE5NjBhY2I3YmJhZjliNDYyMWJkMzVhMGI4OTA=
13
+ MzY2M2JhOWFmNzM3NmM1MmU1ZDYzNTljMTliZWQwZTA0YWI2ODAzNDE3ZTQ1
14
+ ZjM0NDE5NDIwMzc2ZDU0MDM0NTgyNDUyYWRhZjBlMWYzYTk3YzA3NWNiYzhj
15
+ ZWU1NTc4YzJhY2M2Nzc3YmZlYzkwMmMxYmRjODIzOGE5N2Q0MDM=
@@ -29,6 +29,21 @@ module ObjectAttorney
29
29
  respond_to?("#{attribute}=")
30
30
  end
31
31
 
32
+ def attributes_without_destroy(attributes)
33
+ return nil unless attributes.is_a?(Hash)
34
+
35
+ _attributes = attributes.dup
36
+ _attributes.delete("_destroy")
37
+ _attributes.delete(:_destroy)
38
+
39
+ _attributes
40
+ end
41
+
42
+ def attributes_order_destruction?(attributes)
43
+ _destroy = attributes["_destroy"] || attributes[:_destroy]
44
+ ["true", "1", true].include?(_destroy)
45
+ end
46
+
32
47
  end
33
48
 
34
49
  end
@@ -20,9 +20,7 @@ module ObjectAttorney
20
20
  def mark_for_destruction_if_necessary(object, attributes)
21
21
  return nil unless attributes.is_a?(Hash)
22
22
 
23
- _destroy = attributes["_destroy"] || attributes[:_destroy]
24
-
25
- object.mark_for_destruction if ["true", "1", true].include?(_destroy)
23
+ object.mark_for_destruction if attributes_order_destruction? attributes
26
24
  end
27
25
 
28
26
  def nested_objects(macro = nil)
@@ -86,16 +84,6 @@ module ObjectAttorney
86
84
  end
87
85
  end
88
86
 
89
- def attributes_without_destroy(attributes)
90
- return nil unless attributes.is_a?(Hash)
91
-
92
- _attributes = attributes.dup
93
- _attributes.delete("_destroy")
94
- _attributes.delete(:_destroy)
95
-
96
- _attributes
97
- end
98
-
99
87
  def nested_getter(nested_object_name)
100
88
  nested_instance_variable = self.instance_variable_get("@#{nested_object_name}")
101
89
 
@@ -123,7 +111,7 @@ module ObjectAttorney
123
111
 
124
112
  nested_object.assign_attributes(attributes_without_destroy(attributes))
125
113
  mark_for_destruction_if_necessary(nested_object, attributes)
126
- elsif attributes.keys.present?
114
+ elsif attributes.keys.present? && !attributes_order_destruction?(attributes)
127
115
  nested_object = send("build_#{Helpers.singularize(nested_object_name)}", attributes_without_destroy(attributes))
128
116
  mark_for_destruction_if_necessary(nested_object, attributes)
129
117
  end
@@ -153,7 +141,7 @@ module ObjectAttorney
153
141
 
154
142
  def build_new_nested_objects(existing_and_new_nested_objects, nested_object_name)
155
143
  (send("#{nested_object_name}_attributes") || {}).values.each do |attributes|
156
- next if attributes["id"].present? || attributes[:id].present?
144
+ next if attributes["id"].present? || attributes[:id].present? || attributes_order_destruction?(attributes)
157
145
 
158
146
  new_nested_object = send("build_#{Helpers.singularize(nested_object_name)}", attributes_without_destroy(attributes))
159
147
  next unless new_nested_object
@@ -1,3 +1,3 @@
1
1
  module ObjectAttorney
2
- VERSION = "2.5.9"
2
+ VERSION = "2.6.0"
3
3
  end
@@ -122,6 +122,27 @@ shared_examples "a PostForm" do
122
122
  comment.body.should == 'new comment'
123
123
  end
124
124
 
125
+ it "5. Creating new 'Comment's and deleting them at the same time." do
126
+ params = {
127
+ id: 1,
128
+ post: {
129
+ title: "altered post",
130
+ comments_attributes: {
131
+ "0" => { body: '1', _destroy: true },
132
+ "1" => { body: '2' },
133
+ "2" => { body: '3', _destroy: true }
134
+ }
135
+ }
136
+ }
137
+
138
+ post_form = described_class.new(params[:post])
139
+
140
+ post_form.comments.length.should == 1
141
+ post_form.save.should == true
142
+ post_form.comments.length.should == 1
143
+ Comment.all.count.should == 1
144
+ end
145
+
125
146
  end
126
147
 
127
148
  describe PostForm::Base do
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe UserFormWithRubyErrors do
4
+
5
+ xit "1. 'UserFormWithRubyErrors' when saving should through an error!" do
6
+ params = { user: { email: 'email@gmail.com', terms_of_service: true } }
7
+
8
+ user_form = UserFormWithRubyErrors.new(params[:user])
9
+ save_result = user_form.save
10
+
11
+ save_result.should == true
12
+ User.all.count.should == 1
13
+ end
14
+
15
+ end
data/spec/spec_helper.rb CHANGED
@@ -28,6 +28,7 @@ require 'support/form_objects/bulk_posts_allow_only_existing_form'
28
28
  require 'support/form_objects/bulk_posts_allow_only_new_form'
29
29
  require 'support/form_objects/bulk_posts_with_form_objects_form'
30
30
  require 'support/form_objects/user_form'
31
+ require 'support/form_objects/user_form_with_ruby_errors'
31
32
 
32
33
  RSpec.configure do |config|
33
34
  #config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -0,0 +1,15 @@
1
+ class UserFormWithRubyErrors
2
+
3
+ include ObjectAttorney
4
+
5
+ represents :user, properties: [:email]
6
+
7
+ attr_accessor :terms_of_service
8
+
9
+ validates_acceptance_of :terms_of_service, accept: true, allow_nil: false
10
+
11
+ def submit
12
+ fake_var == true
13
+ end
14
+
15
+ end
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.5.9
4
+ version: 2.6.0
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-01-13 00:00:00.000000000 Z
11
+ date: 2014-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,6 +98,7 @@ files:
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
100
  - spec/object_attorney/user_form_spec.rb
101
+ - spec/object_attorney/user_form_with_ruby_errors_spec.rb
101
102
  - spec/spec_helper.rb
102
103
  - spec/support/active_model/validations.rb
103
104
  - spec/support/database_setup.rb
@@ -112,6 +113,7 @@ files:
112
113
  - spec/support/form_objects/post_with_comment_validations_form.rb
113
114
  - spec/support/form_objects/post_with_comments_and_address_form.rb
114
115
  - spec/support/form_objects/user_form.rb
116
+ - spec/support/form_objects/user_form_with_ruby_errors.rb
115
117
  - spec/support/models/address.rb
116
118
  - spec/support/models/comment.rb
117
119
  - spec/support/models/post.rb
@@ -153,6 +155,7 @@ test_files:
153
155
  - spec/object_attorney/post_with_comment_validations_form_spec.rb
154
156
  - spec/object_attorney/post_with_comments_and_address_form_spec.rb
155
157
  - spec/object_attorney/user_form_spec.rb
158
+ - spec/object_attorney/user_form_with_ruby_errors_spec.rb
156
159
  - spec/spec_helper.rb
157
160
  - spec/support/active_model/validations.rb
158
161
  - spec/support/database_setup.rb
@@ -167,8 +170,8 @@ test_files:
167
170
  - spec/support/form_objects/post_with_comment_validations_form.rb
168
171
  - spec/support/form_objects/post_with_comments_and_address_form.rb
169
172
  - spec/support/form_objects/user_form.rb
173
+ - spec/support/form_objects/user_form_with_ruby_errors.rb
170
174
  - spec/support/models/address.rb
171
175
  - spec/support/models/comment.rb
172
176
  - spec/support/models/post.rb
173
177
  - spec/support/models/user.rb
174
- has_rdoc: