iknow_view_models 3.3.0 → 3.3.1
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/iknow_view_models/version.rb +1 -1
- data/lib/view_model/active_record/collection_nested_controller.rb +10 -10
- data/lib/view_model/active_record/nested_controller_base.rb +9 -5
- data/lib/view_model/active_record/singular_nested_controller.rb +6 -6
- data/test/unit/view_model/active_record/has_many_test.rb +33 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 169b16cc95d420bc248b0d201edecc825ce67cdcaf8a8bc743083685731017bf
|
4
|
+
data.tar.gz: 974ba2af7789e733a3aecdb989e0508147c9d415332398a7ab024d212babef9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4dc1e63038e01b6af791ef0551f7f79ac19cbe0ba9b47a6d1fa3367200417afe0b3bfaa9951b8c7287c97d821139e217521229c4bdee34c045da70bcbf0d052
|
7
|
+
data.tar.gz: 63bab618289cf6e24e26ffd7be8d6a2a7571d220c1a1c5b05bb45d52c778bab4aff751f4c3853ce58226c1830de3dfebfa0296db8ad070b5e8e696224ccb3bc7
|
@@ -22,23 +22,23 @@ module ViewModel::ActiveRecord::CollectionNestedController
|
|
22
22
|
extend ActiveSupport::Concern
|
23
23
|
include ViewModel::ActiveRecord::NestedControllerBase
|
24
24
|
|
25
|
-
def index_associated(scope: nil, serialize_context: new_serialize_context, &block)
|
26
|
-
show_association(scope: scope, serialize_context: serialize_context, &block)
|
25
|
+
def index_associated(scope: nil, serialize_context: new_serialize_context, lock_owner: nil, &block)
|
26
|
+
show_association(scope: scope, serialize_context: serialize_context, lock_owner: lock_owner, &block)
|
27
27
|
end
|
28
28
|
|
29
29
|
# Deserialize items of the associated type and associate them with the owner,
|
30
30
|
# replacing previously associated items.
|
31
|
-
def replace(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, &block)
|
32
|
-
write_association(serialize_context: serialize_context, deserialize_context: deserialize_context, &block)
|
31
|
+
def replace(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil, &block)
|
32
|
+
write_association(serialize_context: serialize_context, deserialize_context: deserialize_context, lock_owner: lock_owner, &block)
|
33
33
|
end
|
34
34
|
|
35
|
-
def disassociate_all(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
36
|
-
destroy_association(true, serialize_context: serialize_context, deserialize_context: deserialize_context)
|
35
|
+
def disassociate_all(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
36
|
+
destroy_association(true, serialize_context: serialize_context, deserialize_context: deserialize_context, lock_owner: lock_owner)
|
37
37
|
end
|
38
38
|
|
39
39
|
# Deserialize items of the associated type and append them to the owner's
|
40
40
|
# collection.
|
41
|
-
def append(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
41
|
+
def append(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
42
42
|
assoc_view = nil
|
43
43
|
pre_rendered = owner_viewmodel.transaction do
|
44
44
|
update_hash, refs = parse_viewmodel_updates
|
@@ -50,7 +50,7 @@ module ViewModel::ActiveRecord::CollectionNestedController
|
|
50
50
|
raise ViewModel::DeserializationError::InvalidSyntax.new('Can not provide both `before` and `after` anchors for a collection append')
|
51
51
|
end
|
52
52
|
|
53
|
-
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, serialize_context: serialize_context)
|
53
|
+
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, lock: lock_owner, serialize_context: serialize_context)
|
54
54
|
|
55
55
|
assoc_view = owner_view.append_associated(association_name,
|
56
56
|
update_hash,
|
@@ -69,9 +69,9 @@ module ViewModel::ActiveRecord::CollectionNestedController
|
|
69
69
|
assoc_view
|
70
70
|
end
|
71
71
|
|
72
|
-
def disassociate(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
72
|
+
def disassociate(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
73
73
|
owner_viewmodel.transaction do
|
74
|
-
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, serialize_context: serialize_context)
|
74
|
+
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, lock: lock_owner, serialize_context: serialize_context)
|
75
75
|
owner_view.delete_associated(association_name, viewmodel_id, type: viewmodel_class, deserialize_context: deserialize_context)
|
76
76
|
render_viewmodel(nil)
|
77
77
|
end
|
@@ -9,10 +9,10 @@ module ViewModel::ActiveRecord::NestedControllerBase
|
|
9
9
|
|
10
10
|
protected
|
11
11
|
|
12
|
-
def show_association(scope: nil, serialize_context: new_serialize_context)
|
12
|
+
def show_association(scope: nil, serialize_context: new_serialize_context, lock_owner: nil)
|
13
13
|
associated_views = nil
|
14
14
|
pre_rendered = owner_viewmodel.transaction do
|
15
|
-
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, serialize_context: serialize_context)
|
15
|
+
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, lock: lock_owner, serialize_context: serialize_context)
|
16
16
|
ViewModel::Callbacks.wrap_serialize(owner_view, context: serialize_context) do
|
17
17
|
# Association manipulation methods construct child contexts internally
|
18
18
|
associated_views = owner_view.load_associated(association_name, scope: scope, serialize_context: serialize_context)
|
@@ -27,12 +27,12 @@ module ViewModel::ActiveRecord::NestedControllerBase
|
|
27
27
|
associated_views
|
28
28
|
end
|
29
29
|
|
30
|
-
def write_association(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
30
|
+
def write_association(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
31
31
|
association_view = nil
|
32
32
|
pre_rendered = owner_viewmodel.transaction do
|
33
33
|
update_hash, refs = parse_viewmodel_updates
|
34
34
|
|
35
|
-
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, serialize_context: serialize_context)
|
35
|
+
owner_view = owner_viewmodel.find(owner_viewmodel_id, eager_include: false, lock: lock_owner, serialize_context: serialize_context)
|
36
36
|
|
37
37
|
association_view = owner_view.replace_associated(association_name, update_hash,
|
38
38
|
references: refs,
|
@@ -49,7 +49,11 @@ module ViewModel::ActiveRecord::NestedControllerBase
|
|
49
49
|
association_view
|
50
50
|
end
|
51
51
|
|
52
|
-
def destroy_association(collection, serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
52
|
+
def destroy_association(collection, serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
53
|
+
if lock_owner
|
54
|
+
owner_viewmodel.find(owner_viewmodel_id, eager_include: false, lock: lock_owner, serialize_context: serialize_context)
|
55
|
+
end
|
56
|
+
|
53
57
|
empty_update = collection ? [] : nil
|
54
58
|
owner_viewmodel.deserialize_from_view(owner_update_hash(empty_update),
|
55
59
|
deserialize_context: deserialize_context)
|
@@ -20,15 +20,15 @@ module ViewModel::ActiveRecord::SingularNestedController
|
|
20
20
|
extend ActiveSupport::Concern
|
21
21
|
include ViewModel::ActiveRecord::NestedControllerBase
|
22
22
|
|
23
|
-
def show_associated(scope: nil, serialize_context: new_serialize_context,
|
24
|
-
show_association(scope: scope, serialize_context: serialize_context, &block)
|
23
|
+
def show_associated(scope: nil, serialize_context: new_serialize_context, lock_owner: nil, &block)
|
24
|
+
show_association(scope: scope, serialize_context: serialize_context, lock_owner: lock_owner, &block)
|
25
25
|
end
|
26
26
|
|
27
|
-
def create_associated(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, &block)
|
28
|
-
write_association(serialize_context: serialize_context, deserialize_context: deserialize_context, &block)
|
27
|
+
def create_associated(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil, &block)
|
28
|
+
write_association(serialize_context: serialize_context, deserialize_context: deserialize_context, lock_owner: lock_owner, &block)
|
29
29
|
end
|
30
30
|
|
31
|
-
def destroy_associated(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
|
32
|
-
destroy_association(false, serialize_context: serialize_context, deserialize_context: deserialize_context)
|
31
|
+
def destroy_associated(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context, lock_owner: nil)
|
32
|
+
destroy_association(false, serialize_context: serialize_context, deserialize_context: deserialize_context, lock_owner: lock_owner)
|
33
33
|
end
|
34
34
|
end
|
@@ -808,6 +808,39 @@ class ViewModel::ActiveRecord::HasManyTest < ActiveSupport::TestCase
|
|
808
808
|
assert_match(/Removed entities must have only _type and id fields/, ex.message)
|
809
809
|
end
|
810
810
|
|
811
|
+
def test_functional_update_move
|
812
|
+
c1_id, c2_id, c3_id = @model1.children.pluck(:id)
|
813
|
+
c4_id, c5_id = @model2.children.pluck(:id)
|
814
|
+
|
815
|
+
remove_fupdate = build_fupdate do
|
816
|
+
remove([{ '_type' => 'Child', 'id' => c2_id }])
|
817
|
+
end
|
818
|
+
|
819
|
+
append_fupdate = build_fupdate do
|
820
|
+
append([{ '_type' => 'Child', 'id' => c2_id }])
|
821
|
+
end
|
822
|
+
|
823
|
+
move_view = [
|
824
|
+
{
|
825
|
+
'_type' => 'Model',
|
826
|
+
'id' => @model1.id,
|
827
|
+
'children' => remove_fupdate
|
828
|
+
},
|
829
|
+
{
|
830
|
+
'_type' => 'Model',
|
831
|
+
'id' => @model2.id,
|
832
|
+
'children' => append_fupdate
|
833
|
+
}
|
834
|
+
]
|
835
|
+
|
836
|
+
viewmodel_class.deserialize_from_view(move_view)
|
837
|
+
@model1.reload
|
838
|
+
@model2.reload
|
839
|
+
|
840
|
+
assert_equal([c1_id, c3_id], @model1.children.pluck(:id))
|
841
|
+
assert_equal([c4_id, c5_id, c2_id], @model2.children.pluck(:id))
|
842
|
+
end
|
843
|
+
|
811
844
|
def test_functional_update_update_success
|
812
845
|
c1_id, c2_id, c3_id = @model1.children.pluck(:id)
|
813
846
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iknow_view_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iKnow Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|