iknow_view_models 3.5.2 → 3.5.3
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27ea471c380869f02c7f103025a151b53d99a1c8f19181566852f12f78ba7cd3
|
4
|
+
data.tar.gz: dc18591e8c0b39e986cd0895e691e6d4d3a89df6cf04c4c486b3ecfc8699da4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 156474c34631689f937fda7e3f4a2b2421a8205b3d172a2e72476aa8e440c5bb45b760aaf72a9e70ae9ff9830a209f8be727eb27d233a875aabf963ad88ce85b
|
7
|
+
data.tar.gz: 8e39b0542bef145e8bbc6e6c30ff17d4ff4de2e08c93f7cc7b228cccdac6443159de74e9e3419fada058c09c38b1eba571d4f16633ce83abe6972331a8a4017c
|
@@ -34,14 +34,36 @@ module ViewModel::MigratableView
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
protected
|
38
|
+
|
39
|
+
def migration_class(from, to)
|
40
|
+
@migration_classes.fetch([from, to]) do
|
41
|
+
raise ViewModel::Migration::NoPathError.new(self, from, to)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
37
45
|
private
|
38
46
|
|
39
47
|
# Define a migration on this viewmodel
|
40
|
-
def migrates(from:, to:, &block)
|
48
|
+
def migrates(from:, to:, inherit: nil, at: nil, &block)
|
41
49
|
@migrations_lock.synchronize do
|
42
|
-
|
50
|
+
migration_superclass =
|
51
|
+
if inherit
|
52
|
+
raise ArgumentError.new('Must provide inherit version') unless at
|
53
|
+
|
54
|
+
inherit.migration_class(at - 1, at)
|
55
|
+
else
|
56
|
+
ViewModel::Migration
|
57
|
+
end
|
58
|
+
|
59
|
+
builder = ViewModel::Migration::Builder.new(migration_superclass)
|
43
60
|
builder.instance_exec(&block)
|
44
|
-
|
61
|
+
|
62
|
+
migration_class = builder.build!
|
63
|
+
|
64
|
+
const_set(:"Migration_#{from}_To_#{to}", migration_class)
|
65
|
+
@migration_classes[[from, to]] = migration_class
|
66
|
+
|
45
67
|
@realized_migration_paths = false
|
46
68
|
end
|
47
69
|
end
|
data/lib/view_model/migration.rb
CHANGED
@@ -15,13 +15,14 @@ class ViewModel::Migration
|
|
15
15
|
|
16
16
|
# Tiny DSL for defining migration classes
|
17
17
|
class Builder
|
18
|
-
def initialize
|
18
|
+
def initialize(superclass = ViewModel::Migration)
|
19
|
+
@superclass = superclass
|
19
20
|
@up_block = nil
|
20
21
|
@down_block = nil
|
21
22
|
end
|
22
23
|
|
23
24
|
def build!
|
24
|
-
migration = Class.new(
|
25
|
+
migration = Class.new(@superclass)
|
25
26
|
migration.define_method(:up, &@up_block) if @up_block
|
26
27
|
migration.define_method(:down, &@down_block) if @down_block
|
27
28
|
migration
|
@@ -206,6 +206,55 @@ module ViewModelSpecHelpers
|
|
206
206
|
end
|
207
207
|
end
|
208
208
|
|
209
|
+
module SingleWithInheritedMigration
|
210
|
+
extend ActiveSupport::Concern
|
211
|
+
include ViewModelSpecHelpers::Base
|
212
|
+
|
213
|
+
def migration_bearing_viewmodel_class
|
214
|
+
define_viewmodel_class(
|
215
|
+
:MigrationBearingView,
|
216
|
+
namespace: namespace,
|
217
|
+
viewmodel_base: viewmodel_base,
|
218
|
+
model_base: model_base,
|
219
|
+
spec: ViewModel::TestHelpers::ARVMBuilder::Spec.new(
|
220
|
+
schema: ->(_) {},
|
221
|
+
model: ->(_) {},
|
222
|
+
viewmodel: ->(v) {
|
223
|
+
root!
|
224
|
+
self.schema_version = 2
|
225
|
+
migrates from: 1, to: 2 do
|
226
|
+
down do |view, _refs|
|
227
|
+
view['inherited_base'] = 'present'
|
228
|
+
end
|
229
|
+
end
|
230
|
+
}))
|
231
|
+
end
|
232
|
+
|
233
|
+
def model_attributes
|
234
|
+
migration_bearing_viewmodel_class = self.migration_bearing_viewmodel_class
|
235
|
+
|
236
|
+
super.merge(
|
237
|
+
schema: ->(t) { t.integer :new_field, default: 1, null: false },
|
238
|
+
viewmodel: ->(_v) {
|
239
|
+
self.schema_version = 2
|
240
|
+
|
241
|
+
attribute :new_field
|
242
|
+
|
243
|
+
migrates from: 1, to: 2, inherit: migration_bearing_viewmodel_class, at: 2 do
|
244
|
+
down do |view, refs|
|
245
|
+
super(view, refs)
|
246
|
+
view.delete('new_field')
|
247
|
+
end
|
248
|
+
|
249
|
+
up do |view, refs|
|
250
|
+
view.delete('inherited_base')
|
251
|
+
view['new_field'] = 100
|
252
|
+
end
|
253
|
+
end
|
254
|
+
})
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
209
258
|
module ParentAndBelongsToChildWithMigration
|
210
259
|
extend ActiveSupport::Concern
|
211
260
|
include ViewModelSpecHelpers::ParentAndBelongsToChild
|
@@ -210,6 +210,69 @@ class ViewModel::ActiveRecord::Migration < ActiveSupport::TestCase
|
|
210
210
|
end
|
211
211
|
end
|
212
212
|
|
213
|
+
describe 'inherited migrations' do
|
214
|
+
include ViewModelSpecHelpers::SingleWithInheritedMigration
|
215
|
+
|
216
|
+
def new_model
|
217
|
+
model_class.new(name: 'm1')
|
218
|
+
end
|
219
|
+
|
220
|
+
let(:migration_versions) { { viewmodel_class => 1 } }
|
221
|
+
|
222
|
+
let(:v1_serialization_data) do
|
223
|
+
{
|
224
|
+
ViewModel::TYPE_ATTRIBUTE => viewmodel_class.view_name,
|
225
|
+
ViewModel::VERSION_ATTRIBUTE => 1,
|
226
|
+
ViewModel::ID_ATTRIBUTE => viewmodel.id,
|
227
|
+
'name' => viewmodel.name,
|
228
|
+
'inherited_base' => 'present',
|
229
|
+
}
|
230
|
+
end
|
231
|
+
|
232
|
+
let(:v1_serialization_references) { {} }
|
233
|
+
|
234
|
+
let(:v1_serialization) do
|
235
|
+
{
|
236
|
+
'data' => v1_serialization_data,
|
237
|
+
'references' => v1_serialization_references,
|
238
|
+
}
|
239
|
+
end
|
240
|
+
|
241
|
+
describe 'downwards' do
|
242
|
+
let(:migrator) { down_migrator }
|
243
|
+
let(:subject) { current_serialization.deep_dup }
|
244
|
+
let(:expected_result) do
|
245
|
+
v1_serialization.deep_merge({ 'data' => { ViewModel::MIGRATED_ATTRIBUTE => true } })
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'migrates' do
|
249
|
+
migrate!
|
250
|
+
assert_equal(expected_result, subject)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe 'upwards' do
|
255
|
+
let(:migrator) { up_migrator }
|
256
|
+
let(:subject) { v1_serialization.deep_dup }
|
257
|
+
|
258
|
+
let(:expected_result) do
|
259
|
+
current_serialization.deep_merge(
|
260
|
+
{
|
261
|
+
'data' => {
|
262
|
+
ViewModel::MIGRATED_ATTRIBUTE => true,
|
263
|
+
'new_field' => 100,
|
264
|
+
},
|
265
|
+
},
|
266
|
+
)
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'migrates' do
|
270
|
+
migrate!
|
271
|
+
assert_equal(expected_result, subject)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
213
276
|
describe 'garbage collection' do
|
214
277
|
include ViewModelSpecHelpers::ParentAndSharedBelongsToChild
|
215
278
|
|
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.5.
|
4
|
+
version: 3.5.3
|
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-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|