slim_form_object 3.3.4 → 3.3.5

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 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