iknow_view_models 3.12.1 → 3.13.0

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: 38a806928f1c5c2d76aadb5970b72abeabb5f579bde7164ba0b90de9ed6781ea
4
- data.tar.gz: fa7c33062381a8414be49bc82b87bc938f5bdad278f10f55cb5b64aa0115eb4f
3
+ metadata.gz: cf46376eaf22e04e38fb4b841c10ee273422c4927a1402b4cd2ca4d53f548cb7
4
+ data.tar.gz: eb83782759ccdc0259c25bf15eca93469272a947b0177c03cb739f478be0733b
5
5
  SHA512:
6
- metadata.gz: 9c1b31614c56224a94331c75ff2e44080acda5d92aced69ab0e73dbc2fece60e710ae2e066f69fdf42f0726cd1c80ab7ec762ed24cac36e1343f54f4584bff60
7
- data.tar.gz: fd9b38a254a62fbc67cbe2a0c668e8e3a49ca2474df4a39bf9f1344e60076aaefb8ea01d7e5196a1408a1bfaa2ab3f1f2ec624ea050bca16098b89e78ed3d919
6
+ metadata.gz: 6edef87440a300016dd2044330e25d1927d161a7706abb4fab86cfd1cffde93e980ef978097006364f7fa4330c4b669342c04f3c3768645832faa0b7f8742f99
7
+ data.tar.gz: a44050a5c1aebc470ab8c96e027935463b6dd05f3f796f828be33b40ad3af9cd9148fcddbc69aeadb00b1466b802b049c51378f05e63af2c67143838c74a8308
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IknowViewModels
4
- VERSION = '3.12.1'
4
+ VERSION = '3.13.0'
5
5
  end
@@ -635,7 +635,12 @@ class ViewModel::ActiveRecord
635
635
  deps[association_data.direct_reflection.name.to_s] = referenced_deps
636
636
  end
637
637
 
638
- DeepPreloader::Spec.new(deps)
638
+ deserialization_includes = viewmodel_class.deserialization_includes
639
+ unless deserialization_includes.is_a?(DeepPreloader::AbstractSpec)
640
+ deserialization_includes = DeepPreloader::Spec.parse(deserialization_includes)
641
+ end
642
+
643
+ DeepPreloader::Spec.new(deps).merge!(deserialization_includes)
639
644
  end
640
645
 
641
646
  def viewmodel_reference
data/lib/view_model.rb CHANGED
@@ -192,12 +192,21 @@ class ViewModel
192
192
  end
193
193
 
194
194
  # If this viewmodel represents an AR model, what associations does it make
195
- # use of? Returns a includes spec appropriate for DeepPreloader, either as
196
- # AR-style nested hashes or DeepPreloader::Spec.
195
+ # use of during serialization? Returns a includes spec appropriate for
196
+ # DeepPreloader, either as AR-style nested hashes or DeepPreloader::Spec.
197
197
  def eager_includes(include_referenced: true)
198
198
  {}
199
199
  end
200
200
 
201
+ # If this viewmodel represents an AR model, what associations does it make
202
+ # use of during deserialization? By default all mentioned associations are
203
+ # preloaded, however access controls and hooks may benefit from additional
204
+ # preloading. Returns a includes spec appropriate for DeepPreloader, either
205
+ # as AR-style nested hashes or DeepPreloader::Spec.
206
+ def deserialization_includes
207
+ {}
208
+ end
209
+
201
210
  # ViewModel can serialize ViewModels, Arrays and Hashes of ViewModels, and
202
211
  # relies on Jbuilder#merge! for other values (e.g. primitives).
203
212
  def serialize(target, json, serialize_context: new_serialize_context)
@@ -443,4 +443,26 @@ class ViewModel::ActiveRecord::BelongsToTest < ActiveSupport::TestCase
443
443
  end
444
444
  end
445
445
  end
446
+
447
+ class DeserializationIncludeTest < ActiveSupport::TestCase
448
+ include ARVMTestUtilities
449
+ include ViewModelSpecHelpers::Base
450
+
451
+ def model_attributes
452
+ super.merge(
453
+ viewmodel: ->(_v) {
454
+ def self.deserialization_includes
455
+ :child
456
+ end
457
+ }
458
+ )
459
+ end
460
+
461
+ def test_extra_dependencies
462
+ viewmodel_class # realize lazy dependency
463
+
464
+ root_updates, _ref_updates = ViewModel::ActiveRecord::UpdateData.parse_hashes([{ '_type' => 'Model' }])
465
+ assert_equal(DeepPreloader::Spec.new('child' => nil), root_updates.first.preload_dependencies)
466
+ end
467
+ end
446
468
  end
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.12.1
4
+ version: 3.13.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: 2024-10-09 00:00:00.000000000 Z
11
+ date: 2024-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack