slim_form_object 3.3.4 → 3.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce3b78974679cc29b22f510e32676f1f25a59662b441503ad0ef4bcd1562a88f
4
- data.tar.gz: 58611fe0b47550ad918747cdf4ee247ef44c3a5fce7dd2f261a34de9757cb319
3
+ metadata.gz: 2e4f0412c8cb4946eff0db2874dc18f1eb89a5963fa37e93bebf5f6df43e6325
4
+ data.tar.gz: 0fcdf0fe63e50fce431424ad491d777b82ff526322bd0cd477e8410f5013d5cb
5
5
  SHA512:
6
- metadata.gz: 8fad6de79c2ea9fd1beff0c3da68f5a25232ea155f55d6a4499e2e46f016fe44a16ca15ce1cf4a3cf81bbc4571d41f59ca9c7c0be5949868e00ca58ef18799f8
7
- data.tar.gz: 00e3ad81c740a9d730973e9d7e35efc539316b56b718dd5a3bb70af00c876b0a6e0a2bb5ff59988fa1dec5a34054631486a5c427115bddecca3f65543e760682
6
+ metadata.gz: '0196290af54aa19b2bd8877aaf4fa65bc8e7457395a1591dc3b96c62985f98e35be934509984a7e6f095d8c9785e6f72efb61d2471aadd49bb22cb7815e7988d'
7
+ data.tar.gz: 04f5c24113803d60c5ecf5c29ce3ad10a3abdf39450902fefcdbf83ac1fe76c4970b5e272f218f48e316c4cb3e7c4fe994f8e7af98962efdf2c8475efc4ebb4d
@@ -20,11 +20,14 @@ module SlimFormObject
20
20
  parse_params(params)
21
21
  @data_objects_arr = make_data_objects(data_for_assign)
22
22
  clean_data_objects_arr(data_objects_arr)
23
+
23
24
  associate_all_objects(data_objects_arr)
24
25
 
25
26
  data_objects_arr
26
27
  end
27
28
 
29
+
30
+
28
31
  private
29
32
 
30
33
  # data_for_assign format
@@ -96,32 +99,35 @@ module SlimFormObject
96
99
  end
97
100
  end
98
101
 
99
- def associate_objects(data_objects)
100
- objects = Array.new(data_objects)
101
- while data_object_1 = objects.delete( objects[0] )
102
- associate_all_objects(data_object_1.nested)
103
- objects.each do |data_object_2|
104
- data_object_1.associate_with(data_object_2.object)
105
- end
102
+ def clean_data_objects_arr(objects)
103
+ objects.select! do |data_object|
104
+ clean_data_objects_arr(data_object.nested)
105
+ validator.allow_object_processing?(data_object)
106
106
  end
107
107
  end
108
108
 
109
+ # ASSOCIATE
109
110
  def associate_all_objects(objects)
110
- associate_objects(objects)
111
+ associate_nested_objects(objects)
112
+ associate_parents_with_nested_objects(objects)
113
+ end
111
114
 
112
- objects.each do |data_object|
113
- data_object.nested.each do |nested_data_object|
114
- data_object.associate_with(nested_data_object.object)
115
+ def associate_nested_objects(data_objects)
116
+ cloned_objects = Array.new(data_objects)
117
+ while data_object_1 = cloned_objects.delete(cloned_objects[0])
118
+ associate_nested_objects(data_object_1.nested)
119
+ cloned_objects.each do |data_object_2|
120
+ data_object_1.associate_with(data_object_2.object)
115
121
  end
116
122
  end
117
123
  end
118
124
 
119
- def clean_data_objects_arr(objects)
120
- objects.select! do |data_object|
121
- clean_data_objects_arr(data_object.nested)
122
- validator.allow_object_processing?(data_object)
125
+ def associate_parents_with_nested_objects(data_objects)
126
+ iterate_parents_with_nested_objects(data_objects) do |data_object, nested_data_object|
127
+ data_object.associate_with(nested_data_object.object)
123
128
  end
124
129
  end
130
+ # END ASSOCIATE
125
131
 
126
132
  end
127
133
  end
@@ -15,8 +15,8 @@ module SlimFormObject
15
15
  assign_attributes!
16
16
  end
17
17
 
18
- def associate_with(other_object, stage: nil)
19
- return object if (stage != Saver::STAGE_3 and !object.new_record? and !other_object.new_record?)
18
+ def associate_with(other_object, force: false)
19
+ return object if ( force and (!object.new_record? and !other_object.new_record?) )
20
20
 
21
21
  to_bind_models(object, other_object)
22
22
  end
@@ -0,0 +1,11 @@
1
+ class Array
2
+
3
+ def iterate_with_each_pair
4
+ cloned_objects = Array.new(self)
5
+ while object_1 = cloned_objects.delete(cloned_objects[0])
6
+ cloned_objects.each do |object_2|
7
+ yield(object_1, object_2)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -4,8 +4,8 @@ module HelperMethods
4
4
  end
5
5
 
6
6
  def make_constant_name(snake_model_name, base_module=nil)
7
- pref = base_module ? (base_module.to_s + '::') : ''
8
- pref + snake_model_name.to_s.split('_').map(&:capitalize).join
7
+ pref = base_module ? (base_module.to_s + '::') : ''
8
+ pref + snake_model_name.to_s.split('_').map(&:capitalize).join
9
9
  end
10
10
 
11
11
  def get_class_of(snake_model_name, base_module=nil)
@@ -29,7 +29,7 @@ module HelperMethods
29
29
  def assignment_to_each_other(object_1, object_2)
30
30
  type, method_name = get_type_and_name_of_association(object_1.class, object_2.class)
31
31
 
32
- if type == :belongs_to or type == :has_one
32
+ if type == :belongs_to or type == :has_one
33
33
  object_1.send( "#{method_name.to_s}=", object_2 )
34
34
  elsif type == :has_many or type == :has_and_belongs_to_many
35
35
  object_1.method(method_name).call << object_2
@@ -83,4 +83,14 @@ module HelperMethods
83
83
  end
84
84
  end
85
85
 
86
+ def iterate_parents_with_nested_objects(data_objects, &block)
87
+ data_objects.each do |data_object|
88
+ iterate_parents_with_nested_objects(data_object.nested, &block)
89
+ data_object.nested.each do |nested_data_object|
90
+ block.call(data_object, nested_data_object) if block
91
+ end
92
+ end
93
+ end
94
+
86
95
  end
96
+
@@ -4,8 +4,6 @@ module SlimFormObject
4
4
 
5
5
  attr_reader :form_object, :params, :validator, :data_objects_arr
6
6
 
7
- STAGE_3 = 3
8
-
9
7
  def initialize(form_object)
10
8
  @form_object = form_object
11
9
  @params = form_object.params
@@ -47,6 +45,7 @@ module SlimFormObject
47
45
  stage_1(data_objects_arr)
48
46
  stage_2(data_objects_arr)
49
47
  stage_3(data_objects_arr)
48
+ stage_4(data_objects_arr)
50
49
  form_object.after_save_form_block.call(form_object)
51
50
  end
52
51
  end
@@ -61,7 +60,7 @@ module SlimFormObject
61
60
  end
62
61
  end
63
62
 
64
- # save all objects
63
+ # save all nested objects
65
64
  def stage_2(objects)
66
65
  objects.each do |data_object|
67
66
  stage_2(data_object.nested)
@@ -79,12 +78,17 @@ module SlimFormObject
79
78
  end
80
79
 
81
80
  def associate_and_save_objects(data_objects)
82
- objects = Array.new(data_objects)
83
- while data_object_1 = objects.delete( objects[0] )
84
- objects.each do |data_object_2|
85
- obj = data_object_1.associate_with(data_object_2.object, stage: STAGE_3)
86
- save_object(obj)
87
- end
81
+ data_objects.iterate_with_each_pair do |data_object_1, data_object_2|
82
+ obj = data_object_1.associate_with(data_object_2.object, force: true)
83
+ save_object(obj)
84
+ end
85
+ end
86
+
87
+ # association per parent with all nested objects with FORCE TRUE option
88
+ def stage_4(objects)
89
+ iterate_parents_with_nested_objects(objects) do |data_object, nested_data_object|
90
+ obj = data_object.associate_with(nested_data_object.object, force: true)
91
+ save_object(obj)
88
92
  end
89
93
  end
90
94
 
@@ -93,6 +97,5 @@ module SlimFormObject
93
97
  object_of_model.save!
94
98
  end
95
99
  end
96
-
97
100
  end
98
101
  end
@@ -1,3 +1,3 @@
1
1
  module SlimFormObject
2
- VERSION = "3.3.4"
2
+ VERSION = "3.3.5"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require "slim_form_object/version"
2
+ require "slim_form_object/extensions"
2
3
  require "slim_form_object/helpers"
3
4
  require "slim_form_object/validator"
4
5
  require "slim_form_object/processing"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim_form_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.4
4
+ version: 3.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - nerzh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-15 00:00:00.000000000 Z
11
+ date: 2019-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -149,6 +149,7 @@ files:
149
149
  - lib/slim_form_object.rb
150
150
  - lib/slim_form_object/assign.rb
151
151
  - lib/slim_form_object/data_object.rb
152
+ - lib/slim_form_object/extensions.rb
152
153
  - lib/slim_form_object/form_helpers/extension_actionview.rb
153
154
  - lib/slim_form_object/helpers.rb
154
155
  - lib/slim_form_object/processing.rb