slim_form_object 2.0.4 → 2.1.0
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 +4 -4
- data/lib/slim_form_object/assign.rb +13 -13
- data/lib/slim_form_object/processing.rb +14 -15
- data/lib/slim_form_object/saver.rb +13 -5
- data/lib/slim_form_object/validator.rb +10 -2
- data/lib/slim_form_object/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5117a69b875232f6d8bc23f95e09ff8b84e49f9d
|
4
|
+
data.tar.gz: ceac637e0890c87c2eb25340f1f41c7f0054fcfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa2987d5ce904144c14c0e09b791599a0bc012136f081233dabcf81280356d7e76bfca1adeae98a52001bcad1fd585397dcddb6e496edea4160b10ef97a05613
|
7
|
+
data.tar.gz: ef5e893bdb0fd7d491fd50bbc421ae925c4aec47290a2348a6073944b0721224230af95712266bd82ec37abfb869fb67c0b6e5a6e30abe7163b1ab24b1a2adc9
|
@@ -2,7 +2,7 @@ module SlimFormObject
|
|
2
2
|
class Assign
|
3
3
|
include ::HelperMethods
|
4
4
|
|
5
|
-
attr_reader :form_object, :params, :
|
5
|
+
attr_reader :form_object, :params, :data_for_save, :base_module, :validator
|
6
6
|
|
7
7
|
def initialize(form_object)
|
8
8
|
@form_object = form_object
|
@@ -10,29 +10,29 @@ module SlimFormObject
|
|
10
10
|
@params = form_object.params
|
11
11
|
@array_all_objects_for_save = form_object.array_all_objects_for_save
|
12
12
|
@validator = Validator.new(form_object)
|
13
|
-
@
|
13
|
+
@data_for_save = []
|
14
14
|
end
|
15
15
|
|
16
16
|
def apply_parameters
|
17
17
|
make_all_objects_with_attributes
|
18
18
|
clear_nil_objects
|
19
19
|
|
20
|
-
|
20
|
+
data_for_save
|
21
21
|
end
|
22
22
|
|
23
23
|
def associate_objects
|
24
|
-
associate_all_nested_objects(
|
25
|
-
associate_all_main_objects(
|
24
|
+
associate_all_nested_objects(data_for_save)
|
25
|
+
associate_all_main_objects(data_for_save)
|
26
26
|
|
27
|
-
|
27
|
+
data_for_save
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
31
31
|
|
32
32
|
def clear_nil_objects
|
33
33
|
arr_ids_nil_object = []
|
34
|
-
find_ids_nil_object(arr_ids_nil_object,
|
35
|
-
delete_hash_nil_objects(arr_ids_nil_object,
|
34
|
+
find_ids_nil_object(arr_ids_nil_object, data_for_save)
|
35
|
+
delete_hash_nil_objects(arr_ids_nil_object, data_for_save)
|
36
36
|
end
|
37
37
|
|
38
38
|
def delete_hash_nil_objects(ids_arr, nested_array)
|
@@ -51,13 +51,13 @@ module SlimFormObject
|
|
51
51
|
|
52
52
|
def associate_all_nested_objects(nested_array, object=nil)
|
53
53
|
nested_array.each do |hash|
|
54
|
-
to_bind_models(object, hash[:essence][:object]) if object
|
54
|
+
to_bind_models(object, hash[:essence][:object]) if object and validator.allow_to_associate_objects?(object, hash[:essence][:object])
|
55
55
|
associate_all_nested_objects(hash[:nested], hash[:essence][:object])
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def associate_all_main_objects(
|
60
|
-
objects = Array.new(
|
59
|
+
def associate_all_main_objects(data_for_save)
|
60
|
+
objects = Array.new(data_for_save)
|
61
61
|
while object = objects.delete( objects[0] )
|
62
62
|
object_1 = object[:essence][:object]
|
63
63
|
objects.each do |hash|
|
@@ -70,7 +70,7 @@ module SlimFormObject
|
|
70
70
|
|
71
71
|
def make_all_objects_with_attributes
|
72
72
|
params.each do |main_model_name, hash|
|
73
|
-
assign_objects_attributes(main_model_name, hash,
|
73
|
+
assign_objects_attributes(main_model_name, hash, data_for_save, :main)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -123,7 +123,7 @@ module SlimFormObject
|
|
123
123
|
# }
|
124
124
|
# }
|
125
125
|
|
126
|
-
# make_all_objects_with_attributes() EXAMPLE @
|
126
|
+
# make_all_objects_with_attributes() EXAMPLE @data_for_save FORMAT
|
127
127
|
#
|
128
128
|
# [
|
129
129
|
# {
|
@@ -47,13 +47,11 @@ module SlimFormObject
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# CALLBACKS
|
50
|
-
%w(
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
50
|
+
%w(allow_to_save_object allow_to_associate_objects before_save_form after_save_form before_validation_form after_validation_form).each do |method_name|
|
51
|
+
define_method("#{method_name}".to_sym) do |&block|
|
52
|
+
self.instance_eval do
|
53
|
+
define_method("#{method_name}_block".to_sym) { block }
|
54
|
+
end if block
|
57
55
|
end
|
58
56
|
end
|
59
57
|
# END CALLBACKS
|
@@ -104,9 +102,9 @@ module SlimFormObject
|
|
104
102
|
end
|
105
103
|
|
106
104
|
def apply
|
107
|
-
assign
|
108
|
-
|
109
|
-
|
105
|
+
assign = Assign.new(self)
|
106
|
+
self.data_for_save = assign.apply_parameters
|
107
|
+
self.data_for_save = assign.associate_objects
|
110
108
|
end
|
111
109
|
|
112
110
|
def get_or_add_default_objects
|
@@ -121,12 +119,13 @@ module SlimFormObject
|
|
121
119
|
|
122
120
|
def default_settings
|
123
121
|
define_singleton_method(:array_models_which_not_save_if_empty) { [] } unless respond_to?(:array_models_which_not_save_if_empty)
|
124
|
-
define_singleton_method(:
|
125
|
-
define_singleton_method(:
|
126
|
-
define_singleton_method(:
|
127
|
-
define_singleton_method(:
|
122
|
+
define_singleton_method(:allow_to_associate_objects_block) { Proc.new { true } } unless respond_to?(:allow_to_associate_objects_block)
|
123
|
+
define_singleton_method(:allow_to_save_object_block) { Proc.new { true } } unless respond_to?(:allow_to_save_object_block)
|
124
|
+
define_singleton_method(:before_save_form_block) { Proc.new {} } unless respond_to?(:before_save_form_block)
|
125
|
+
define_singleton_method(:after_save_form_block) { Proc.new {} } unless respond_to?(:after_save_form_block)
|
126
|
+
define_singleton_method(:before_validation_form_block) { Proc.new {} } unless respond_to?(:before_validation_form_block)
|
127
|
+
define_singleton_method(:after_validation_form_block) { Proc.new {} } unless respond_to?(:after_validation_form_block)
|
128
128
|
end
|
129
|
-
|
130
129
|
end
|
131
130
|
end
|
132
131
|
|
@@ -33,9 +33,10 @@ module SlimFormObject
|
|
33
33
|
|
34
34
|
def save_all
|
35
35
|
ActiveRecord::Base.transaction do
|
36
|
-
form_object.
|
36
|
+
form_object.before_save_form_block.call(form_object)
|
37
37
|
save_main_objects
|
38
|
-
|
38
|
+
save_nested_objects
|
39
|
+
form_object.after_save_form_block.call(form_object)
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
@@ -48,20 +49,27 @@ module SlimFormObject
|
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
52
|
+
def save_nested_objects
|
53
|
+
data_for_save.each do |main_object|
|
54
|
+
main_object[:nested].each do |object|
|
55
|
+
save_object(object[:essence][:object])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
51
60
|
def save_objects(object_1, object_2)
|
52
61
|
object_for_save = to_bind_models(object_1, object_2)
|
53
62
|
save_object(object_for_save)
|
54
63
|
end
|
55
64
|
|
56
65
|
def save_object(object_of_model)
|
57
|
-
object_of_model.save!
|
66
|
+
object_of_model.save! if validator.allow_to_save_object?(object_of_model)
|
58
67
|
end
|
59
68
|
|
60
69
|
def save_last_model_if_not_associations(object_1)
|
61
70
|
association_trigger = false
|
62
71
|
data_for_save.each { |hash| association_trigger = true if get_reflection(object_1.class, hash[:essence][:object].class) }
|
63
|
-
object_1
|
72
|
+
save_object(object_1) unless association_trigger
|
64
73
|
end
|
65
|
-
|
66
74
|
end
|
67
75
|
end
|
@@ -13,15 +13,23 @@ module SlimFormObject
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def validate_form_object
|
16
|
-
form_object.
|
16
|
+
form_object.before_validation_form_block.call(form_object)
|
17
17
|
validation_objects(data_for_save)
|
18
|
-
form_object.
|
18
|
+
form_object.after_validation_form_block.call(form_object)
|
19
19
|
end
|
20
20
|
|
21
21
|
def save_if_object_is_empty?(object)
|
22
22
|
!(all_attributes_is_nil?(object) and array_models_which_not_save_if_empty.include?(object.class))
|
23
23
|
end
|
24
24
|
|
25
|
+
def allow_to_save_object?(object)
|
26
|
+
form_object.allow_to_save_object_block.call(object)
|
27
|
+
end
|
28
|
+
|
29
|
+
def allow_to_associate_objects?(object_1, object_2)
|
30
|
+
form_object.allow_to_associate_objects_block.call(object_1, object_2)
|
31
|
+
end
|
32
|
+
|
25
33
|
private
|
26
34
|
|
27
35
|
def validation_objects(nested_array)
|
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: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- woodcrust
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|