iknow_view_models 3.4.1 → 3.5.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/iknow_view_models.gemspec +2 -2
- data/lib/iknow_view_models/version.rb +1 -1
- data/lib/view_model.rb +12 -0
- data/lib/view_model/active_record.rb +46 -5
- data/lib/view_model/active_record/association_data.rb +3 -1
- data/lib/view_model/active_record/association_manipulation.rb +186 -49
- data/lib/view_model/active_record/cloner.rb +13 -12
- data/lib/view_model/active_record/collection_nested_controller.rb +5 -2
- data/lib/view_model/active_record/controller_base.rb +45 -6
- data/lib/view_model/active_record/nested_controller_base.rb +126 -14
- data/lib/view_model/active_record/singular_nested_controller.rb +5 -2
- data/lib/view_model/callbacks.rb +1 -1
- data/lib/view_model/controller.rb +24 -2
- data/lib/view_model/record.rb +1 -1
- data/lib/view_model/schemas.rb +44 -0
- data/test/helpers/arvm_test_utilities.rb +65 -0
- data/test/helpers/controller_test_helpers.rb +65 -34
- data/test/unit/view_model/active_record/controller_nested_test.rb +599 -0
- data/test/unit/view_model/active_record/controller_test.rb +6 -362
- data/test/unit/view_model/active_record/has_many_test.rb +24 -7
- data/test/unit/view_model/active_record/has_many_through_test.rb +28 -12
- data/test/unit/view_model/traversal_context_test.rb +15 -1
- metadata +7 -5
@@ -438,19 +438,24 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
|
|
438
438
|
pv = ParentView.new(@parent1)
|
439
439
|
context = ParentView.new_deserialize_context
|
440
440
|
|
441
|
-
|
442
|
-
|
443
|
-
|
441
|
+
data = [{ ViewModel::REFERENCE_ATTRIBUTE => 'tag1' }]
|
442
|
+
references = { 'tag1' => { '_type' => 'Tag', 'name' => 'new_tag' } }
|
443
|
+
|
444
|
+
updated = pv.replace_associated(:tags,
|
445
|
+
data, references: references,
|
446
|
+
deserialize_context: context)
|
447
|
+
|
448
|
+
post_children = ParentView.new(Parent.find(@parent1.id))._read_association(:tags)
|
444
449
|
|
445
450
|
expected_edit_checks = [pv.to_reference,
|
446
|
-
*
|
451
|
+
*post_children.map(&:to_reference),]
|
447
452
|
|
448
453
|
assert_contains_exactly(expected_edit_checks,
|
449
454
|
context.valid_edit_refs)
|
450
455
|
|
451
|
-
assert_equal(1,
|
452
|
-
assert(
|
453
|
-
assert_equal('new_tag',
|
456
|
+
assert_equal(1, updated.size)
|
457
|
+
assert(updated[0].is_a?(TagView))
|
458
|
+
assert_equal('new_tag', updated[0].name)
|
454
459
|
|
455
460
|
@parent1.reload
|
456
461
|
assert_equal(['new_tag'], tags(@parent1).map(&:name))
|
@@ -467,13 +472,19 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
|
|
467
472
|
tag2 = @tag2
|
468
473
|
|
469
474
|
update = build_fupdate do
|
470
|
-
append([{
|
475
|
+
append([{ViewModel::REFERENCE_ATTRIBUTE => 'ref_new_tag'}])
|
471
476
|
remove([{ '_type' => 'Tag', 'id' => tag2.id }])
|
472
|
-
update([{
|
477
|
+
update([{ViewModel::REFERENCE_ATTRIBUTE => 'ref_tag1'}])
|
473
478
|
end
|
474
479
|
|
475
|
-
|
476
|
-
|
480
|
+
references = {
|
481
|
+
'ref_new_tag' => { '_type' => 'Tag', 'name' => 'new_tag' },
|
482
|
+
'ref_tag1' => { '_type' => 'Tag', 'id' => tag1.id, 'name' => 'renamed tag1' },
|
483
|
+
}
|
484
|
+
|
485
|
+
updated = pv.replace_associated(:tags, update, references: references, deserialize_context: context)
|
486
|
+
post_children = ParentView.new(Parent.find(@parent1.id))._read_association(:tags)
|
487
|
+
new_tag = post_children.detect { |t| t.name == 'new_tag' }
|
477
488
|
|
478
489
|
expected_edit_checks = [ViewModel::Reference.new(ParentView, @parent1.id),
|
479
490
|
ViewModel::Reference.new(TagView, @tag1.id),
|
@@ -482,7 +493,12 @@ class ViewModel::ActiveRecord::HasManyThroughTest < ActiveSupport::TestCase
|
|
482
493
|
assert_contains_exactly(expected_edit_checks,
|
483
494
|
context.valid_edit_refs)
|
484
495
|
|
485
|
-
assert_equal(2,
|
496
|
+
assert_equal(2, post_children.size)
|
497
|
+
assert_equal(2, update.size)
|
498
|
+
assert_contains_exactly(
|
499
|
+
['new_tag', 'renamed tag1'],
|
500
|
+
updated.map(&:name),
|
501
|
+
)
|
486
502
|
|
487
503
|
@parent1.reload
|
488
504
|
assert_equal(['renamed tag1', 'new_tag'], tags(@parent1).map(&:name))
|
@@ -187,7 +187,21 @@ class ViewModel::TraversalContextTest < ActiveSupport::TestCase
|
|
187
187
|
it 'traverses as expected in replace_associated' do
|
188
188
|
ctx = vm_deserialize_context(viewmodel_class)
|
189
189
|
replacement = subject_association.collection? ? [new_child_hash] : new_child_hash
|
190
|
-
|
190
|
+
references = {}
|
191
|
+
|
192
|
+
# Referenced collections need to be presented as is, _except_ for when they're owned, as
|
193
|
+
# this is special cased in NestedControllerBase#write_association (+_bulk) for
|
194
|
+
# convenience.
|
195
|
+
if subject_association.referenced? && !subject_association.owned?
|
196
|
+
replacement = ViewModel::Utils.wrap_one_or_many(replacement) do |replacements|
|
197
|
+
replacements.map!.with_index do |update, index|
|
198
|
+
references["ref#{index}"] = update
|
199
|
+
{ ViewModel::REFERENCE_ATTRIBUTE => "ref#{index}" }
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
vm.replace_associated(subject_association_name, replacement, references: references, deserialize_context: ctx)
|
191
205
|
|
192
206
|
expected = expected_parent_details
|
193
207
|
expected = expected.merge(expected_children_details) unless subject_association.referenced?
|
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.
|
4
|
+
version: 3.5.0
|
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-
|
11
|
+
date: 2021-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.
|
61
|
+
version: 1.0.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.
|
68
|
+
version: 1.0.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: iknow_cache
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -362,7 +362,7 @@ dependencies:
|
|
362
362
|
version: '0'
|
363
363
|
description: ''
|
364
364
|
email:
|
365
|
-
-
|
365
|
+
- systems@iknow.jp
|
366
366
|
executables: []
|
367
367
|
extensions: []
|
368
368
|
extra_rdoc_files: []
|
@@ -453,6 +453,7 @@ files:
|
|
453
453
|
- test/unit/view_model/active_record/belongs_to_test.rb
|
454
454
|
- test/unit/view_model/active_record/cache_test.rb
|
455
455
|
- test/unit/view_model/active_record/cloner_test.rb
|
456
|
+
- test/unit/view_model/active_record/controller_nested_test.rb
|
456
457
|
- test/unit/view_model/active_record/controller_test.rb
|
457
458
|
- test/unit/view_model/active_record/counter_test.rb
|
458
459
|
- test/unit/view_model/active_record/customization_test.rb
|
@@ -514,6 +515,7 @@ test_files:
|
|
514
515
|
- test/unit/view_model/active_record/belongs_to_test.rb
|
515
516
|
- test/unit/view_model/active_record/cache_test.rb
|
516
517
|
- test/unit/view_model/active_record/cloner_test.rb
|
518
|
+
- test/unit/view_model/active_record/controller_nested_test.rb
|
517
519
|
- test/unit/view_model/active_record/controller_test.rb
|
518
520
|
- test/unit/view_model/active_record/counter_test.rb
|
519
521
|
- test/unit/view_model/active_record/customization_test.rb
|