iknow_view_models 3.9.2 → 3.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13912eaa6913049d8b8a5ac98d135d25f23abbfedf3046ba9c1a12ee92bae45d
4
- data.tar.gz: 9d8c5abafd90bac5cfa955aa152b89d03cd0657f3923edb5e7ef5e534cd5e4a1
3
+ metadata.gz: 85aa5f3dd882b989e6a4d1fa8d5d89be347f5f3c215af86851f1ef086d583472
4
+ data.tar.gz: d202810ca019d425b0de503b7a077d164d5919dc9206cf069e93b37ddf432334
5
5
  SHA512:
6
- metadata.gz: 3072dd149b35d236ca79f0a2a22232bf30274a05a141ce77f74358a1c2ac9b72f7c877879bbff1508c71fae477d0ebdff4daf2c35347bf71e07cc3811e4227c2
7
- data.tar.gz: d42c834cf4e569b8685a9e787fc9ea01de1bc656f5f5cfd6255228806556823368f2685913414b68c84d23474b19d33329803d89c47525c91194f1b2a88d2b26
6
+ metadata.gz: 3005ecb2044fd83003ccd444fb2b22d9787b74c929f157573baa084d4d3dff1b2f24d86e30f1ee9bd1e03604a4a0f9a57ec7431cadaea28faa45eda235dbcd28
7
+ data.tar.gz: 82971047b73442cbccaf9e3e80f1386dc373329b91f94260f2daeeb5794f99b3502cc47b911a62da38f7d0932b9fea49ae72319de9fb2d79f8be6035e0a34110
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IknowViewModels
4
- VERSION = '3.9.2'
4
+ VERSION = '3.10.0'
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require 'view_model/active_record/controller_base'
4
4
  require 'view_model/active_record/collection_nested_controller'
5
5
  require 'view_model/active_record/singular_nested_controller'
6
+ require 'view_model/controller/migration_versions'
6
7
 
7
8
  # Controller for accessing an ViewModel::ActiveRecord
8
9
  # Provides for the following routes:
@@ -16,8 +17,7 @@ module ViewModel::ActiveRecord::Controller
16
17
  include ViewModel::ActiveRecord::ControllerBase
17
18
  include ViewModel::ActiveRecord::CollectionNestedController
18
19
  include ViewModel::ActiveRecord::SingularNestedController
19
-
20
- MIGRATION_VERSION_HEADER = 'X-ViewModel-Versions'
20
+ include ViewModel::Controller::MigrationVersions
21
21
 
22
22
  def show(scope: nil, viewmodel_class: self.viewmodel_class, serialize_context: new_serialize_context(viewmodel_class: viewmodel_class))
23
23
  view = nil
@@ -95,51 +95,6 @@ module ViewModel::ActiveRecord::Controller
95
95
  parse_param(:id)
96
96
  end
97
97
 
98
- def migration_versions
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 ||=
109
- begin
110
- version_spec =
111
- if params.include?(:versions)
112
- params[:versions]
113
- elsif request.headers.include?(MIGRATION_VERSION_HEADER)
114
- begin
115
- JSON.parse(request.headers[MIGRATION_VERSION_HEADER])
116
- rescue JSON::ParserError
117
- raise ViewModel::Error.new(status: 400, detail: "Invalid JSON in #{MIGRATION_VERSION_HEADER}")
118
- end
119
- else
120
- {}
121
- end
122
-
123
- versions =
124
- IknowParams::Parser.parse_value(
125
- version_spec,
126
- with: IknowParams::Serializer::HashOf.new(
127
- IknowParams::Serializer::String, IknowParams::Serializer::Integer))
128
-
129
- migration_versions = {}
130
-
131
- versions.each do |view_name, required_version|
132
- viewmodel_class = ViewModel::Registry.for_view_name(view_name)
133
- migration_versions[viewmodel_class] = required_version
134
- rescue ViewModel::DeserializationError::UnknownView
135
- # Ignore requests to migrate types that no longer exist
136
- next
137
- end
138
-
139
- migration_versions.freeze
140
- end
141
- end
142
-
143
98
  def migrated_deep_schema_version
144
99
  ViewModel::Migrator.migrated_deep_schema_version(viewmodel_class, migration_versions, include_referenced: true)
145
100
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViewModel::Controller::MigrationVersions
4
+ extend ActiveSupport::Concern
5
+
6
+ MIGRATION_VERSION_HEADER = 'X-ViewModel-Versions'
7
+
8
+ def migration_versions
9
+ @migration_versions ||=
10
+ begin
11
+ specified_migration_versions.reject do |viewmodel_class, required_version|
12
+ viewmodel_class.schema_version == required_version
13
+ end.freeze
14
+ end
15
+ end
16
+
17
+ def specified_migration_versions
18
+ @specified_migration_versions ||=
19
+ begin
20
+ version_spec =
21
+ if params.include?(:versions)
22
+ params[:versions]
23
+ elsif request.headers.include?(MIGRATION_VERSION_HEADER)
24
+ begin
25
+ JSON.parse(request.headers[MIGRATION_VERSION_HEADER])
26
+ rescue JSON::ParserError
27
+ raise ViewModel::Error.new(status: 400, detail: "Invalid JSON in #{MIGRATION_VERSION_HEADER}")
28
+ end
29
+ else
30
+ {}
31
+ end
32
+
33
+ versions =
34
+ IknowParams::Parser.parse_value(
35
+ version_spec,
36
+ with: IknowParams::Serializer::HashOf.new(
37
+ IknowParams::Serializer::String, IknowParams::Serializer::Integer))
38
+
39
+ migration_versions = {}
40
+
41
+ versions.each do |view_name, required_version|
42
+ viewmodel_class = ViewModel::Registry.for_view_name(view_name)
43
+ migration_versions[viewmodel_class] = required_version
44
+ rescue ViewModel::DeserializationError::UnknownView
45
+ # Ignore requests to migrate types that no longer exist
46
+ next
47
+ end
48
+
49
+ migration_versions.freeze
50
+ end
51
+ end
52
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iknow_view_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iKnow Team
@@ -428,6 +428,7 @@ files:
428
428
  - lib/view_model/changes.rb
429
429
  - lib/view_model/config.rb
430
430
  - lib/view_model/controller.rb
431
+ - lib/view_model/controller/migration_versions.rb
431
432
  - lib/view_model/deserialization_error.rb
432
433
  - lib/view_model/deserialize_context.rb
433
434
  - lib/view_model/error.rb