object_attorney 2.2.5 → 2.2.6

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
- OTA4OTVjZjA2YTQxNTgwMzJlYThkYmVkMzU4M2M1MmY4ODUzM2RjOA==
4
+ NjVkNTljNjRiNzdkYzJhMTU2N2ZkM2UzYTU2ZmFkZTQ5ODUxMmQ4Mw==
5
5
  data.tar.gz: !binary |-
6
- Njc5MjUzNjdiZWUwNWY4NmNmZmNhMTY4OGQ3YTNhZmNkOTczNTA2ZQ==
6
+ MWQwZGRhNzkzNmYyMGY5ZGIxMWVhZDQ2ZDQ3ZGY0ZDQxYzViNzI0ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OGFjYWQ2ZWM5ODE1YmJlNmQ1YTY2YmYxZDNkZTM4YTM0N2FhMjBkOTU4NTNk
10
- NjMxMGUzNjhjNWUwYzE2OGQ3NDc0ZDA2NmE4MDAzM2YwNmExMjc4ZjEyNDE0
11
- Y2VjNDA1MWRiN2NkZmRiNTlmNWIwMjM2ZjY5MzI5YzUzMWVhMzE=
9
+ M2U0Mjc0NWIwYzVmZTUzNDA5Y2I5NGQ0MDg1NDQxNzE0MGMwNmNiNWJkYTc3
10
+ NGViYzY3MmYxMmU3MzQ0MGE3MjBjYmM2ZjNkOWQ1OGViZjVjZTRhMDYzYTNj
11
+ ODc5YTFjYjk5OGQxNzMzYjAxZTU3NjA3YWY3YmQ4OTYwNWZiYTA=
12
12
  data.tar.gz: !binary |-
13
- ZGU3MmU1NmY5NzFjYTkwMTM5YmNkNWNjYWUwODgxN2FjNmY0YjdmNjhkMzMw
14
- NzgwMDk0Yzc3OTRiYjM3OGFjMTI0ZTQzNDhhMTBjNTU5MWQxNGM4NTAyOTZl
15
- NGI5ZTlkNjVhMmIwNmRmODg5Nzg2ODdkY2E3ODZhMDc0OWNjMWY=
13
+ M2UwZmQ2MWJiZGMwNTc5NTIxZjQ0YjA5MzJlZjFkYTE2NjAzNGQyN2U1NjZh
14
+ ZjJmZjE1MzAzNzkzNmY5OGMzODZiZDFlMDkzMjliOTUwYWQ1MDdiMTg5NDUx
15
+ YTRjOTNmMDI4ODZhZTIwNGEwYjRhZDYxNjgyYTBhMTQ1MjM4YWM=
@@ -8,6 +8,8 @@ require 'active_record'
8
8
  module ObjectAttorney
9
9
 
10
10
  def initialize(attributes = {}, object = nil)
11
+ before_initialize(attributes)
12
+
11
13
  if !attributes.is_a?(Hash) && object.blank?
12
14
  object = attributes
13
15
  attributes = nil
@@ -20,7 +22,7 @@ module ObjectAttorney
20
22
  assign_attributes attributes
21
23
  mark_for_destruction_if_necessary(self, attributes)
22
24
 
23
- init(attributes)
25
+ after_initialize(attributes)
24
26
  end
25
27
 
26
28
  def assign_attributes(attributes = {})
@@ -43,7 +45,8 @@ module ObjectAttorney
43
45
 
44
46
  protected #################### PROTECTED METHODS DOWN BELOW ######################
45
47
 
46
- def init(attributes); end
48
+ def before_initialize(attributes); end
49
+ def after_initialize(attributes); end
47
50
 
48
51
  def allowed_attribute(attribute)
49
52
  respond_to?("#{attribute}=")
@@ -185,11 +185,14 @@ module ObjectAttorney
185
185
  def existing_nested_objects(nested_object_name)
186
186
  nested_relection = self.class.reflect_on_association(nested_object_name)
187
187
 
188
- existing = represented_object.blank? ? nested_relection.klass.all : represented_object.send(nested_object_name)
189
- existing ||= (nested_relection.has_many? ? [] : nil)
188
+ existing = represented_object.blank? ? nested_relection.klass.all : (represented_object.send(nested_object_name) || (nested_relection.has_many? ? [] : nil))
190
189
 
191
- if represented_object.present? && existing.respond_to?(:map) && nested_relection.klass != self.class.represented_object_class.reflect_on_association(nested_object_name).try(:klass)
192
- existing = existing.map { |existing_nested_object| nested_relection.klass.new({}, existing_nested_object) }
190
+ if represented_object.present? && nested_relection.klass != self.class.represented_object_class.reflect_on_association(nested_object_name).try(:klass)
191
+ if existing.respond_to?(:map)
192
+ existing = existing.map { |existing_nested_object| nested_relection.klass.new({}, existing_nested_object) }
193
+ else
194
+ existing = nested_relection.klass.new({}, existing)
195
+ end
193
196
  end
194
197
 
195
198
  existing
@@ -198,15 +201,15 @@ module ObjectAttorney
198
201
  module ClassMethods
199
202
 
200
203
  def has_many(nested_object_name, options = {})
201
- _accepts_nested_objects_overwrite_macro(nested_object_name, options, :has_many)
204
+ accepts_nested_objects_overwrite_macro(nested_object_name, options, :has_many)
202
205
  end
203
206
 
204
207
  def has_one(nested_object_name, options = {})
205
- _accepts_nested_objects_overwrite_macro(nested_object_name, options, :has_one)
208
+ accepts_nested_objects_overwrite_macro(nested_object_name, options, :has_one)
206
209
  end
207
210
 
208
211
  def belongs_to(nested_object_name, options = {})
209
- _accepts_nested_objects_overwrite_macro(nested_object_name, options, :belongs_to)
212
+ accepts_nested_objects_overwrite_macro(nested_object_name, options, :belongs_to)
210
213
  end
211
214
 
212
215
  def accepts_nested_objects(nested_object_name, options = {})
@@ -215,11 +218,13 @@ module ObjectAttorney
215
218
  self.instance_variable_set("@#{nested_object_name}_reflection", reflection)
216
219
  self.instance_variable_set("@association_reflections", association_reflections | [reflection])
217
220
 
218
- self.send(:attr_accessor, "#{nested_object_name}_attributes".to_sym)
221
+ define_nested_attributes_accessor(nested_object_name)
219
222
 
220
223
  define_method(nested_object_name) { nested_getter(nested_object_name) }
221
224
  define_method("build_#{reflection.single_name}") { |attributes = {}, nested_object = nil| build_nested_object(nested_object_name, attributes) }
222
225
  define_method("existing_#{nested_object_name}") { existing_nested_objects(nested_object_name) }
226
+
227
+ define_nested_ids_accessor(nested_object_name, reflection)
223
228
  end
224
229
 
225
230
  def association_reflections
@@ -237,7 +242,24 @@ module ObjectAttorney
237
242
 
238
243
  private ############################### PRIVATE METHODS ###########################
239
244
 
240
- def _accepts_nested_objects_overwrite_macro(nested_object_name, options, macro)
245
+ def define_nested_attributes_accessor(nested_object_name)
246
+ self.send(:attr_writer, "#{nested_object_name}_attributes".to_sym)
247
+ module_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
248
+ def #{nested_object_name}_attributes; @#{nested_object_name}_attributes ||= {}; end
249
+ RUBY_EVAL
250
+ end
251
+
252
+ def define_nested_ids_accessor(nested_object_name, reflection)
253
+ return nil unless reflection.has_many?
254
+
255
+ module_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
256
+ def #{reflection.single_name}_ids
257
+ @#{reflection.single_name}_ids ||= nested_object_name.map(&:#{reflection.primary_key})
258
+ end
259
+ RUBY_EVAL
260
+ end
261
+
262
+ def accepts_nested_objects_overwrite_macro(nested_object_name, options, macro)
241
263
  default_options = { macro: macro }
242
264
  options = options.is_a?(Hash) ? options.merge(default_options) : default_options
243
265
  accepts_nested_objects(nested_object_name, options)
@@ -1,3 +1,3 @@
1
1
  module ObjectAttorney
2
- VERSION = "2.2.5"
2
+ VERSION = "2.2.6"
3
3
  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.2.5
4
+ version: 2.2.6
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-03 00:00:00.000000000 Z
11
+ date: 2014-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,4 +157,3 @@ test_files:
157
157
  - spec/support/models/comment.rb
158
158
  - spec/support/models/post.rb
159
159
  - spec/support/models/user.rb
160
- has_rdoc: