iknow_view_models 3.1.8 → 3.2.4

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +6 -6
  3. data/.rubocop.yml +18 -0
  4. data/Appraisals +6 -6
  5. data/Gemfile +6 -2
  6. data/Rakefile +5 -5
  7. data/gemfiles/rails_5_2.gemfile +5 -5
  8. data/gemfiles/rails_6_0.gemfile +9 -0
  9. data/iknow_view_models.gemspec +40 -38
  10. data/lib/iknow_view_models.rb +9 -7
  11. data/lib/iknow_view_models/version.rb +1 -1
  12. data/lib/view_model.rb +31 -17
  13. data/lib/view_model/access_control.rb +5 -2
  14. data/lib/view_model/access_control/composed.rb +10 -9
  15. data/lib/view_model/access_control/open.rb +2 -0
  16. data/lib/view_model/access_control/read_only.rb +2 -0
  17. data/lib/view_model/access_control/tree.rb +11 -6
  18. data/lib/view_model/access_control_error.rb +4 -1
  19. data/lib/view_model/active_record.rb +17 -15
  20. data/lib/view_model/active_record/association_data.rb +2 -1
  21. data/lib/view_model/active_record/association_manipulation.rb +6 -4
  22. data/lib/view_model/active_record/cache.rb +114 -34
  23. data/lib/view_model/active_record/cache/cacheable_view.rb +2 -2
  24. data/lib/view_model/active_record/collection_nested_controller.rb +3 -3
  25. data/lib/view_model/active_record/controller.rb +68 -1
  26. data/lib/view_model/active_record/controller_base.rb +4 -1
  27. data/lib/view_model/active_record/nested_controller_base.rb +1 -0
  28. data/lib/view_model/active_record/update_context.rb +8 -6
  29. data/lib/view_model/active_record/update_data.rb +32 -30
  30. data/lib/view_model/active_record/update_operation.rb +17 -13
  31. data/lib/view_model/active_record/visitor.rb +0 -1
  32. data/lib/view_model/after_transaction_runner.rb +0 -1
  33. data/lib/view_model/callbacks.rb +3 -1
  34. data/lib/view_model/controller.rb +13 -3
  35. data/lib/view_model/deserialization_error.rb +15 -12
  36. data/lib/view_model/error.rb +12 -10
  37. data/lib/view_model/error_view.rb +3 -1
  38. data/lib/view_model/migratable_view.rb +78 -0
  39. data/lib/view_model/migration.rb +48 -0
  40. data/lib/view_model/migration/no_path_error.rb +26 -0
  41. data/lib/view_model/migration/one_way_error.rb +24 -0
  42. data/lib/view_model/migration/unspecified_version_error.rb +24 -0
  43. data/lib/view_model/migrator.rb +108 -0
  44. data/lib/view_model/record.rb +15 -14
  45. data/lib/view_model/reference.rb +3 -1
  46. data/lib/view_model/references.rb +8 -5
  47. data/lib/view_model/registry.rb +14 -2
  48. data/lib/view_model/schemas.rb +9 -4
  49. data/lib/view_model/serialization_error.rb +4 -1
  50. data/lib/view_model/serialize_context.rb +4 -4
  51. data/lib/view_model/test_helpers.rb +8 -3
  52. data/lib/view_model/test_helpers/arvm_builder.rb +21 -15
  53. data/lib/view_model/traversal_context.rb +2 -1
  54. data/nix/dependencies.nix +5 -0
  55. data/nix/gem/generate.rb +2 -1
  56. data/shell.nix +8 -3
  57. data/test/.rubocop.yml +14 -0
  58. data/test/helpers/arvm_test_models.rb +12 -9
  59. data/test/helpers/arvm_test_utilities.rb +5 -3
  60. data/test/helpers/controller_test_helpers.rb +55 -32
  61. data/test/helpers/match_enumerator.rb +1 -0
  62. data/test/helpers/query_logging.rb +2 -1
  63. data/test/helpers/test_access_control.rb +5 -3
  64. data/test/helpers/viewmodel_spec_helpers.rb +88 -22
  65. data/test/unit/view_model/access_control_test.rb +144 -144
  66. data/test/unit/view_model/active_record/alias_test.rb +15 -13
  67. data/test/unit/view_model/active_record/belongs_to_test.rb +40 -39
  68. data/test/unit/view_model/active_record/cache_test.rb +68 -31
  69. data/test/unit/view_model/active_record/cloner_test.rb +67 -63
  70. data/test/unit/view_model/active_record/controller_test.rb +113 -65
  71. data/test/unit/view_model/active_record/counter_test.rb +10 -9
  72. data/test/unit/view_model/active_record/customization_test.rb +59 -58
  73. data/test/unit/view_model/active_record/has_many_test.rb +112 -111
  74. data/test/unit/view_model/active_record/has_many_through_poly_test.rb +15 -14
  75. data/test/unit/view_model/active_record/has_many_through_test.rb +33 -38
  76. data/test/unit/view_model/active_record/has_one_test.rb +37 -36
  77. data/test/unit/view_model/active_record/migration_test.rb +161 -0
  78. data/test/unit/view_model/active_record/namespacing_test.rb +19 -17
  79. data/test/unit/view_model/active_record/poly_test.rb +44 -45
  80. data/test/unit/view_model/active_record/shared_test.rb +30 -28
  81. data/test/unit/view_model/active_record/version_test.rb +9 -7
  82. data/test/unit/view_model/active_record_test.rb +72 -72
  83. data/test/unit/view_model/callbacks_test.rb +19 -15
  84. data/test/unit/view_model/controller_test.rb +4 -2
  85. data/test/unit/view_model/record_test.rb +158 -145
  86. data/test/unit/view_model/registry_test.rb +38 -0
  87. data/test/unit/view_model/traversal_context_test.rb +4 -5
  88. data/test/unit/view_model_test.rb +18 -16
  89. metadata +38 -12
  90. data/.travis.yml +0 -31
  91. data/appveyor.yml +0 -22
  92. data/gemfiles/rails_6_0_beta.gemfile +0 -9
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'minitest/unit'
5
+ require 'minitest/hooks'
6
+
7
+ require_relative '../../helpers/arvm_test_utilities'
8
+ require_relative '../../helpers/arvm_test_models'
9
+ require_relative '../../helpers/viewmodel_spec_helpers'
10
+
11
+ require 'view_model'
12
+ require 'view_model/active_record'
13
+
14
+ class ViewModel
15
+ class RegistryTest < ActiveSupport::TestCase
16
+ using ViewModel::Utils::Collections
17
+ include ARVMTestUtilities
18
+ extend Minitest::Spec::DSL
19
+ include ViewModelSpecHelpers::ParentAndBelongsToChild
20
+
21
+ before(:each) do
22
+ ViewModel::Registry.clear_removed_classes!
23
+ end
24
+
25
+ it 'registers the views' do
26
+ assert_equal(ViewModel::Registry.for_view_name(view_name), viewmodel_class)
27
+ assert_equal(ViewModel::Registry.for_view_name(child_view_name), child_viewmodel_class)
28
+ end
29
+
30
+ it 'enumerates the views' do
31
+ assert_contains_exactly([ViewModel::ErrorView, viewmodel_class, child_viewmodel_class], ViewModel::Registry.all)
32
+ end
33
+
34
+ it 'enumerates the root views' do
35
+ assert_contains_exactly([viewmodel_class], ViewModel::Registry.roots)
36
+ end
37
+ end
38
+ end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
-
4
3
  require 'minitest/autorun'
5
4
  require 'minitest/unit'
6
5
  require 'minitest/hooks'
7
6
 
8
- require_relative '../../helpers/match_enumerator.rb'
9
- require_relative '../../helpers/arvm_test_utilities.rb'
10
- require_relative '../../helpers/arvm_test_models.rb'
11
- require_relative '../../helpers/viewmodel_spec_helpers.rb'
7
+ require_relative '../../helpers/match_enumerator'
8
+ require_relative '../../helpers/arvm_test_utilities'
9
+ require_relative '../../helpers/arvm_test_models'
10
+ require_relative '../../helpers/viewmodel_spec_helpers'
12
11
 
13
12
  require 'view_model'
14
13
  require 'view_model/record'
@@ -1,7 +1,9 @@
1
- require "bundler/setup"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
2
4
  Bundler.require
3
5
 
4
- require "minitest/autorun"
6
+ require 'minitest/autorun'
5
7
 
6
8
  class DefaultViewModel < ViewModel
7
9
  self.view_name = 'DefaultViewModel'
@@ -19,44 +21,44 @@ end
19
21
 
20
22
  class ViewModel::ActiveRecordTest < ActiveSupport::TestCase
21
23
  def test_serialize
22
- s = TestViewModel.new("a")
24
+ s = TestViewModel.new('a')
23
25
  assert_equal(TestViewModel.serialize_to_hash(s),
24
- { "name" => "a" })
26
+ { 'name' => 'a' })
25
27
  end
26
28
 
27
29
  def test_default_serialize
28
- s = DefaultViewModel.new("a", 1)
30
+ s = DefaultViewModel.new('a', 1)
29
31
  assert_equal(TestViewModel.serialize_to_hash(s),
30
- { "foo" => "a", "bar" => 1 })
32
+ { 'foo' => 'a', 'bar' => 1 })
31
33
  end
32
34
 
33
35
  def test_default_serialize_array
34
- s = DefaultViewModel.new("a", [1,2])
36
+ s = DefaultViewModel.new('a', [1, 2])
35
37
  assert_equal(TestViewModel.serialize_to_hash(s),
36
- { "foo" => "a", "bar" => [1,2] })
38
+ { 'foo' => 'a', 'bar' => [1, 2] })
37
39
  end
38
40
 
39
41
  def test_default_serialize_hash
40
- s = DefaultViewModel.new("a", { "x" => "y" })
42
+ s = DefaultViewModel.new('a', { 'x' => 'y' })
41
43
  assert_equal(DefaultViewModel.serialize_to_hash(s),
42
- { "foo" => "a", "bar" => { "x" => "y" } })
44
+ { 'foo' => 'a', 'bar' => { 'x' => 'y' } })
43
45
  end
44
46
 
45
47
  def test_default_serialize_empty_hash
46
- s = DefaultViewModel.new("a", {})
48
+ s = DefaultViewModel.new('a', {})
47
49
  assert_equal(DefaultViewModel.serialize_to_hash(s),
48
- { "foo" => "a", "bar" => {} })
50
+ { 'foo' => 'a', 'bar' => {} })
49
51
  end
50
52
 
51
53
  def test_default_serialize_viewmodel
52
- s = DefaultViewModel.new("a", DefaultViewModel.new(1, 2))
54
+ s = DefaultViewModel.new('a', DefaultViewModel.new(1, 2))
53
55
  assert_equal(DefaultViewModel.serialize_to_hash(s),
54
- { "foo" => "a", "bar" => { "foo" => 1, "bar" => 2 } })
56
+ { 'foo' => 'a', 'bar' => { 'foo' => 1, 'bar' => 2 } })
55
57
  end
56
58
 
57
59
  def test_default_serialize_array_of_viewmodel
58
- s = DefaultViewModel.new("a", [TestViewModel.new("x"), TestViewModel.new("y")])
60
+ s = DefaultViewModel.new('a', [TestViewModel.new('x'), TestViewModel.new('y')])
59
61
  assert_equal(DefaultViewModel.serialize_to_hash(s),
60
- { "foo" => "a", "bar" => [{"name" => "x"}, {"name" => "y"}] })
62
+ { 'foo' => 'a', 'bar' => [{ 'name' => 'x' }, { 'name' => 'y' }] })
61
63
  end
62
64
  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.1.8
4
+ version: 3.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - iKnow Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-26 00:00:00.000000000 Z
11
+ date: 2020-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: 2.2.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: safe_values
98
+ name: keyword_builder
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: keyword_builder
112
+ name: safe_values
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: oj
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: renum
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -193,7 +207,7 @@ dependencies:
193
207
  - !ruby/object:Gem::Version
194
208
  version: '0'
195
209
  - !ruby/object:Gem::Dependency
196
- name: oj
210
+ name: rgl
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - ">="
@@ -280,16 +294,16 @@ dependencies:
280
294
  name: pg
281
295
  requirement: !ruby/object:Gem::Requirement
282
296
  requirements:
283
- - - "~>"
297
+ - - ">="
284
298
  - !ruby/object:Gem::Version
285
- version: '0.18'
299
+ version: '0'
286
300
  type: :development
287
301
  prerelease: false
288
302
  version_requirements: !ruby/object:Gem::Requirement
289
303
  requirements:
290
- - - "~>"
304
+ - - ">="
291
305
  - !ruby/object:Gem::Version
292
- version: '0.18'
306
+ version: '0'
293
307
  - !ruby/object:Gem::Dependency
294
308
  name: pry
295
309
  requirement: !ruby/object:Gem::Requirement
@@ -357,15 +371,14 @@ files:
357
371
  - ".envrc"
358
372
  - ".gitignore"
359
373
  - ".idea/codeStyleSettings.xml"
360
- - ".travis.yml"
374
+ - ".rubocop.yml"
361
375
  - Appraisals
362
376
  - Gemfile
363
377
  - LICENSE.txt
364
378
  - README.md
365
379
  - Rakefile
366
- - appveyor.yml
367
380
  - gemfiles/rails_5_2.gemfile
368
- - gemfiles/rails_6_0_beta.gemfile
381
+ - gemfiles/rails_6_0.gemfile
369
382
  - iknow_view_models.gemspec
370
383
  - lib/iknow_view_models.rb
371
384
  - lib/iknow_view_models/railtie.rb
@@ -401,6 +414,12 @@ files:
401
414
  - lib/view_model/deserialize_context.rb
402
415
  - lib/view_model/error.rb
403
416
  - lib/view_model/error_view.rb
417
+ - lib/view_model/migratable_view.rb
418
+ - lib/view_model/migration.rb
419
+ - lib/view_model/migration/no_path_error.rb
420
+ - lib/view_model/migration/one_way_error.rb
421
+ - lib/view_model/migration/unspecified_version_error.rb
422
+ - lib/view_model/migrator.rb
404
423
  - lib/view_model/record.rb
405
424
  - lib/view_model/record/attribute_data.rb
406
425
  - lib/view_model/reference.rb
@@ -414,8 +433,10 @@ files:
414
433
  - lib/view_model/traversal_context.rb
415
434
  - lib/view_model/utils.rb
416
435
  - lib/view_model/utils/collections.rb
436
+ - nix/dependencies.nix
417
437
  - nix/gem/generate.rb
418
438
  - shell.nix
439
+ - test/.rubocop.yml
419
440
  - test/config/database.yml
420
441
  - test/helpers/arvm_test_models.rb
421
442
  - test/helpers/arvm_test_utilities.rb
@@ -437,6 +458,7 @@ files:
437
458
  - test/unit/view_model/active_record/has_many_through_poly_test.rb
438
459
  - test/unit/view_model/active_record/has_many_through_test.rb
439
460
  - test/unit/view_model/active_record/has_one_test.rb
461
+ - test/unit/view_model/active_record/migration_test.rb
440
462
  - test/unit/view_model/active_record/namespacing_test.rb
441
463
  - test/unit/view_model/active_record/poly_test.rb
442
464
  - test/unit/view_model/active_record/shared_test.rb
@@ -446,6 +468,7 @@ files:
446
468
  - test/unit/view_model/controller_test.rb
447
469
  - test/unit/view_model/deserialization_error/unique_violation_test.rb
448
470
  - test/unit/view_model/record_test.rb
471
+ - test/unit/view_model/registry_test.rb
449
472
  - test/unit/view_model/traversal_context_test.rb
450
473
  - test/unit/view_model_test.rb
451
474
  homepage: https://github.com/iknow/cerego_view_models
@@ -473,6 +496,7 @@ specification_version: 4
473
496
  summary: ViewModels provide a means of encapsulating a collection of related data
474
497
  and specifying its JSON serialization.
475
498
  test_files:
499
+ - test/.rubocop.yml
476
500
  - test/config/database.yml
477
501
  - test/helpers/arvm_test_models.rb
478
502
  - test/helpers/arvm_test_utilities.rb
@@ -494,6 +518,7 @@ test_files:
494
518
  - test/unit/view_model/active_record/has_many_through_poly_test.rb
495
519
  - test/unit/view_model/active_record/has_many_through_test.rb
496
520
  - test/unit/view_model/active_record/has_one_test.rb
521
+ - test/unit/view_model/active_record/migration_test.rb
497
522
  - test/unit/view_model/active_record/namespacing_test.rb
498
523
  - test/unit/view_model/active_record/poly_test.rb
499
524
  - test/unit/view_model/active_record/shared_test.rb
@@ -503,5 +528,6 @@ test_files:
503
528
  - test/unit/view_model/controller_test.rb
504
529
  - test/unit/view_model/deserialization_error/unique_violation_test.rb
505
530
  - test/unit/view_model/record_test.rb
531
+ - test/unit/view_model/registry_test.rb
506
532
  - test/unit/view_model/traversal_context_test.rb
507
533
  - test/unit/view_model_test.rb
@@ -1,31 +0,0 @@
1
- dist: trusty
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
-
6
- rvm:
7
- - 2.5
8
-
9
- gemfile:
10
- - gemfiles/rails_5_2.gemfile
11
-
12
- addons:
13
- postgresql: "10"
14
- apt:
15
- packages:
16
- - postgresql-10
17
- - postgresql-client-10
18
- - postgresql-server-dev-10
19
- env:
20
- global:
21
- - PGPORT=5433
22
-
23
- before_install:
24
- - gem update --system
25
- - gem install bundler
26
-
27
- before_script:
28
- - psql -c 'CREATE DATABASE iknow_view_models;'
29
-
30
- notifications:
31
- email: false
@@ -1,22 +0,0 @@
1
- ---
2
- version: "{build}"
3
- image: ubuntu
4
-
5
- stack:
6
- - ruby 2.5.0, postgresql
7
-
8
- build: off
9
-
10
- install:
11
- - sudo -u postgres createdb -O appveyor iknow_view_models
12
- - sudo apt-get update
13
- - sudo apt-get -y install postgresql-server-dev-10
14
- - gem install bundler
15
- - bundle install
16
-
17
- before_test:
18
- - ruby -v
19
- - bundle -v
20
-
21
- test_script:
22
- - bundle exec rake
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "minitest-ci"
6
- gem "activerecord", "~> 6.0.0.beta"
7
- gem "activesupport", "~> 6.0.0.beta"
8
-
9
- gemspec path: "../"