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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85aa5f3dd882b989e6a4d1fa8d5d89be347f5f3c215af86851f1ef086d583472
|
4
|
+
data.tar.gz: d202810ca019d425b0de503b7a077d164d5919dc9206cf069e93b37ddf432334
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3005ecb2044fd83003ccd444fb2b22d9787b74c929f157573baa084d4d3dff1b2f24d86e30f1ee9bd1e03604a4a0f9a57ec7431cadaea28faa45eda235dbcd28
|
7
|
+
data.tar.gz: 82971047b73442cbccaf9e3e80f1386dc373329b91f94260f2daeeb5794f99b3502cc47b911a62da38f7d0932b9fea49ae72319de9fb2d79f8be6035e0a34110
|
@@ -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.
|
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
|