iknow_view_models 3.7.5 → 3.7.7

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: 93c994829498ed19d7214cca326ef7c361de788b5d88fb00e4927208aca9f21a
4
- data.tar.gz: 75019085c70b0feed81316211922e3cb87b6dfee0485a3c6424070db028a68cd
3
+ metadata.gz: 849a8c0a38a21b8d8d8c706aae9800c2d5b009a81e59432d501cc0cef8329db3
4
+ data.tar.gz: b9cfa60ace9c9f6af4c711f7ae11fd8aa76934bcef7d6e7b360b749fe667d4b4
5
5
  SHA512:
6
- metadata.gz: 90ac0ba33c195e22e1d3f51e9be84cdccb0fe5646d8f2ee93deba2eb5aff865a6a37dd1bf0f115a0c00fc6e33b64a086a5519b1acd90a107cede3d54c018f0c2
7
- data.tar.gz: 949f86898a69d142dd5f1576054d18675785fcaae9d30c64344f1e3681f18aabae82c61cddd08a6ca3523796380cfb62e1ccb1ceee6d8d5c92753b59837c51a9
6
+ metadata.gz: 6e510f3a65791a27df5be2eabb889bd5a5addb84ee17f4e1b2f1ff7b76dfb1630978e3fc1b90bc1c26b36a83d9bb6892e9c3eb7e235b7f762946ab0c3b9b4ab4
7
+ data.tar.gz: 67f12f88ce24394ddcaa639008a66ea0120fa5e062463fed5c4d30e0f20a75e7dda7823f025304b3cf4d1cda9e5640cbe281f459aab22f84ed5a4d920eb7f9b6
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IknowViewModels
4
- VERSION = '3.7.5'
4
+ VERSION = '3.7.7'
5
5
  end
@@ -97,6 +97,15 @@ module ViewModel::ActiveRecord::Controller
97
97
 
98
98
  def migration_versions
99
99
  @migration_versions ||=
100
+ begin
101
+ specified_migration_versions.reject do |viewmodel_class, required_version|
102
+ viewmodel_class.schema_version == required_version
103
+ end.freeze
104
+ end
105
+ end
106
+
107
+ def specified_migration_versions
108
+ @specified_migration_versions ||=
100
109
  begin
101
110
  version_spec =
102
111
  if params.include?(:versions)
@@ -121,10 +130,7 @@ module ViewModel::ActiveRecord::Controller
121
130
 
122
131
  versions.each do |view_name, required_version|
123
132
  viewmodel_class = ViewModel::Registry.for_view_name(view_name)
124
-
125
- if viewmodel_class.schema_version != required_version
126
- migration_versions[viewmodel_class] = required_version
127
- end
133
+ migration_versions[viewmodel_class] = required_version
128
134
  rescue ViewModel::DeserializationError::UnknownView
129
135
  # Ignore requests to migrate types that no longer exist
130
136
  next
@@ -81,15 +81,15 @@ class ViewModel::ActiveRecord
81
81
  viewmodel._list_attribute = reposition_to
82
82
  end
83
83
 
84
+ # Visit attributes and associations as much as possible in the order
85
+ # that they're declared in the view.
86
+ member_ordering = viewmodel.class._members.keys.each_with_index.to_h
87
+
84
88
  # update user-specified attributes
85
- valid_members = viewmodel.class._members.keys.map(&:to_s).to_set
86
- bad_keys = attributes.keys.reject { |k| valid_members.include?(k) }
87
- if bad_keys.present?
88
- causes = bad_keys.map { |k| ViewModel::DeserializationError::UnknownAttribute.new(k, blame_reference) }
89
- raise ViewModel::DeserializationError::Collection.for_errors(causes)
90
- end
89
+ attribute_keys = attributes.keys.sort_by { |k| member_ordering[k] }
90
+ attribute_keys.each do |attr_name|
91
+ serialized_value = attributes[attr_name]
91
92
 
92
- attributes.each do |attr_name, serialized_value|
93
93
  # Note that the VM::AR deserialization tree asserts ownership over any
94
94
  # references it's provided, and so they're intentionally not passed on
95
95
  # to attribute deserialization for use by their `using:` viewmodels. A
@@ -101,7 +101,13 @@ class ViewModel::ActiveRecord
101
101
  end
102
102
 
103
103
  # Update points-to associations before save
104
- points_to.each do |association_data, child_operation|
104
+ points_to_keys = points_to.keys.sort_by do |association_data|
105
+ member_ordering[association_data.association_name]
106
+ end
107
+
108
+ points_to_keys.each do |association_data|
109
+ child_operation = points_to[association_data]
110
+
105
111
  reflection = association_data.direct_reflection
106
112
  debug "-> #{debug_name}: Updating points-to association '#{reflection.name}'"
107
113
 
@@ -138,7 +144,12 @@ class ViewModel::ActiveRecord
138
144
 
139
145
  # Update association cache of pointed-from associations after save: the
140
146
  # child update will have saved the pointer.
141
- pointed_to.each do |association_data, child_operation|
147
+ pointed_to_keys = pointed_to.keys.sort_by do |association_data|
148
+ member_ordering[association_data.association_name]
149
+ end
150
+
151
+ pointed_to_keys.each do |association_data|
152
+ child_operation = pointed_to[association_data]
142
153
  reflection = association_data.direct_reflection
143
154
 
144
155
  debug "-> #{debug_name}: Updating pointed-to association '#{reflection.name}'"
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.7.5
4
+ version: 3.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - iKnow Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-31 00:00:00.000000000 Z
11
+ date: 2024-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack