iknow_view_models 2.10.1 → 3.0.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 +4 -4
 - data/.circleci/config.yml +119 -0
 - data/.travis.yml +31 -0
 - data/Appraisals +6 -16
 - data/gemfiles/{rails_7_0.gemfile → rails_6_0_beta.gemfile} +2 -2
 - data/iknow_view_models.gemspec +3 -5
 - data/lib/iknow_view_models/version.rb +1 -1
 - data/lib/view_model/active_record/association_data.rb +206 -92
 - data/lib/view_model/active_record/association_manipulation.rb +22 -12
 - data/lib/view_model/active_record/cache/cacheable_view.rb +3 -13
 - data/lib/view_model/active_record/cache.rb +2 -2
 - data/lib/view_model/active_record/cloner.rb +11 -11
 - data/lib/view_model/active_record/controller.rb +0 -2
 - data/lib/view_model/active_record/update_context.rb +21 -3
 - data/lib/view_model/active_record/update_data.rb +43 -45
 - data/lib/view_model/active_record/update_operation.rb +265 -153
 - data/lib/view_model/active_record/visitor.rb +9 -6
 - data/lib/view_model/active_record.rb +94 -74
 - data/lib/view_model/after_transaction_runner.rb +3 -18
 - data/lib/view_model/callbacks.rb +2 -2
 - data/lib/view_model/changes.rb +24 -16
 - data/lib/view_model/config.rb +6 -2
 - data/lib/view_model/deserialization_error.rb +31 -0
 - data/lib/view_model/deserialize_context.rb +2 -6
 - data/lib/view_model/error_view.rb +6 -5
 - data/lib/view_model/record/attribute_data.rb +11 -6
 - data/lib/view_model/record.rb +44 -24
 - data/lib/view_model/serialize_context.rb +2 -63
 - data/lib/view_model/test_helpers/arvm_builder.rb +2 -4
 - data/lib/view_model/traversal_context.rb +2 -2
 - data/lib/view_model.rb +21 -13
 - data/shell.nix +1 -1
 - data/test/helpers/arvm_test_models.rb +4 -12
 - data/test/helpers/arvm_test_utilities.rb +6 -0
 - data/test/helpers/controller_test_helpers.rb +6 -6
 - data/test/helpers/viewmodel_spec_helpers.rb +63 -52
 - data/test/unit/view_model/access_control_test.rb +88 -37
 - data/test/unit/view_model/active_record/belongs_to_test.rb +110 -178
 - data/test/unit/view_model/active_record/cache_test.rb +11 -5
 - data/test/unit/view_model/active_record/cloner_test.rb +1 -1
 - data/test/unit/view_model/active_record/controller_test.rb +12 -20
 - data/test/unit/view_model/active_record/has_many_test.rb +540 -316
 - data/test/unit/view_model/active_record/has_many_through_poly_test.rb +12 -15
 - data/test/unit/view_model/active_record/has_many_through_test.rb +15 -58
 - data/test/unit/view_model/active_record/has_one_test.rb +288 -135
 - data/test/unit/view_model/active_record/poly_test.rb +0 -1
 - data/test/unit/view_model/active_record/shared_test.rb +21 -39
 - data/test/unit/view_model/active_record/version_test.rb +3 -2
 - data/test/unit/view_model/active_record_test.rb +5 -63
 - data/test/unit/view_model/callbacks_test.rb +1 -0
 - data/test/unit/view_model/record_test.rb +0 -32
 - data/test/unit/view_model/traversal_context_test.rb +13 -12
 - metadata +15 -25
 - data/.github/workflows/gem-push.yml +0 -31
 - data/.github/workflows/test.yml +0 -65
 - data/gemfiles/rails_6_0.gemfile +0 -9
 - data/gemfiles/rails_6_1.gemfile +0 -9
 - data/test/unit/view_model/active_record/optional_attribute_view_test.rb +0 -58
 
    
        data/.github/workflows/test.yml
    DELETED
    
    | 
         @@ -1,65 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            name: Run Tests
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            on:
         
     | 
| 
       4 
     | 
    
         
            -
              pull_request:
         
     | 
| 
       5 
     | 
    
         
            -
                branches: "**"
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            permissions:
         
     | 
| 
       8 
     | 
    
         
            -
              contents: read
         
     | 
| 
       9 
     | 
    
         
            -
              checks: write
         
     | 
| 
       10 
     | 
    
         
            -
              pull-requests: write
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            jobs:
         
     | 
| 
       13 
     | 
    
         
            -
              test:
         
     | 
| 
       14 
     | 
    
         
            -
                runs-on: ubuntu-latest
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                services:
         
     | 
| 
       17 
     | 
    
         
            -
                  postgres:
         
     | 
| 
       18 
     | 
    
         
            -
                    image: postgres:13-alpine
         
     | 
| 
       19 
     | 
    
         
            -
                    ports:
         
     | 
| 
       20 
     | 
    
         
            -
                      - "5432:5432"
         
     | 
| 
       21 
     | 
    
         
            -
                    env:
         
     | 
| 
       22 
     | 
    
         
            -
                      POSTGRES_DB: iknow_view_models
         
     | 
| 
       23 
     | 
    
         
            -
                      POSTGRES_USER: rails
         
     | 
| 
       24 
     | 
    
         
            -
                      POSTGRES_PASSWORD: password
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                strategy:
         
     | 
| 
       27 
     | 
    
         
            -
                  fail-fast: false
         
     | 
| 
       28 
     | 
    
         
            -
                  matrix:
         
     | 
| 
       29 
     | 
    
         
            -
                    ruby-version: ['2.7', '3.0', '3.1', '3.2']
         
     | 
| 
       30 
     | 
    
         
            -
                    include:
         
     | 
| 
       31 
     | 
    
         
            -
                      - ruby-version: '2.7'
         
     | 
| 
       32 
     | 
    
         
            -
                        bundle-gemfile: gemfiles/rails_5_2.gemfile
         
     | 
| 
       33 
     | 
    
         
            -
                      - ruby-version: '3.0'
         
     | 
| 
       34 
     | 
    
         
            -
                        bundle-gemfile: gemfiles/rails_6_0.gemfile
         
     | 
| 
       35 
     | 
    
         
            -
                      - ruby-version: '3.1'
         
     | 
| 
       36 
     | 
    
         
            -
                        bundle-gemfile: gemfiles/rails_6_1.gemfile
         
     | 
| 
       37 
     | 
    
         
            -
                      - ruby-version: '3.2'
         
     | 
| 
       38 
     | 
    
         
            -
                        bundle-gemfile: gemfiles/rails_7_0.gemfile
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
         
     | 
| 
       41 
     | 
    
         
            -
                  BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.bundle-gemfile }}
         
     | 
| 
       42 
     | 
    
         
            -
                  DATABASE_URL: "postgres://rails:password@localhost:5432/iknow_view_models"
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                steps:
         
     | 
| 
       45 
     | 
    
         
            -
                - uses: actions/checkout@v3
         
     | 
| 
       46 
     | 
    
         
            -
                - name: Set up Ruby
         
     | 
| 
       47 
     | 
    
         
            -
                  uses: ruby/setup-ruby@v1
         
     | 
| 
       48 
     | 
    
         
            -
                  with:
         
     | 
| 
       49 
     | 
    
         
            -
                    ruby-version: ${{ matrix.ruby-version }}
         
     | 
| 
       50 
     | 
    
         
            -
                    bundler-cache: true # runs 'bundle install' and caches installed gems automatically
         
     | 
| 
       51 
     | 
    
         
            -
                - name: Run tests
         
     | 
| 
       52 
     | 
    
         
            -
                  run: bundle exec rake test
         
     | 
| 
       53 
     | 
    
         
            -
                - name: Upload result
         
     | 
| 
       54 
     | 
    
         
            -
                  uses: actions/upload-artifact@v3
         
     | 
| 
       55 
     | 
    
         
            -
                  if: always()
         
     | 
| 
       56 
     | 
    
         
            -
                  with:
         
     | 
| 
       57 
     | 
    
         
            -
                    path: test/reports/
         
     | 
| 
       58 
     | 
    
         
            -
                    name: test_results_${{ matrix.ruby-version }}
         
     | 
| 
       59 
     | 
    
         
            -
                - name: Test Report
         
     | 
| 
       60 
     | 
    
         
            -
                  uses: dorny/test-reporter@v1
         
     | 
| 
       61 
     | 
    
         
            -
                  if: always()
         
     | 
| 
       62 
     | 
    
         
            -
                  with:
         
     | 
| 
       63 
     | 
    
         
            -
                    name: Minitest Tests - ${{ matrix.ruby-version }}
         
     | 
| 
       64 
     | 
    
         
            -
                    path: test/reports/*.xml
         
     | 
| 
       65 
     | 
    
         
            -
                    reporter: java-junit
         
     | 
    
        data/gemfiles/rails_6_0.gemfile
    DELETED
    
    
    
        data/gemfiles/rails_6_1.gemfile
    DELETED
    
    
| 
         @@ -1,58 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require_relative "../../../helpers/arvm_test_utilities.rb"
         
     | 
| 
       2 
     | 
    
         
            -
            require_relative "../../../helpers/arvm_test_models.rb"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require "minitest/autorun"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            require "view_model/active_record"
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            class ViewModel::ActiveRecord::AttributeViewTest < ActiveSupport::TestCase
         
     | 
| 
       9 
     | 
    
         
            -
              include ARVMTestUtilities
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              def before_all
         
     | 
| 
       12 
     | 
    
         
            -
                super
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                build_viewmodel(:Thing) do
         
     | 
| 
       15 
     | 
    
         
            -
                  define_schema do |t|
         
     | 
| 
       16 
     | 
    
         
            -
                    t.integer :a
         
     | 
| 
       17 
     | 
    
         
            -
                    t.integer :b
         
     | 
| 
       18 
     | 
    
         
            -
                  end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  define_model do
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  define_viewmodel do
         
     | 
| 
       24 
     | 
    
         
            -
                    attribute :a
         
     | 
| 
       25 
     | 
    
         
            -
                    attribute :b, optional: true
         
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
              end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              def setup
         
     | 
| 
       31 
     | 
    
         
            -
                super
         
     | 
| 
       32 
     | 
    
         
            -
                @thing = Thing.create!(a: 1, b: 2)
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                @skel = { "_type"    => "Thing",
         
     | 
| 
       35 
     | 
    
         
            -
                          "_version" => 1,
         
     | 
| 
       36 
     | 
    
         
            -
                          "id"       => @thing.id }
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              def test_optional_not_serialized
         
     | 
| 
       40 
     | 
    
         
            -
                view, _refs = serialize_with_references(ThingView.new(@thing))
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                assert_equal(@skel.merge("a" => 1), view)
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              def test_optional_included
         
     | 
| 
       46 
     | 
    
         
            -
                view, _refs = serialize_with_references(ThingView.new(@thing),
         
     | 
| 
       47 
     | 
    
         
            -
                                                        serialize_context: ThingView.new_serialize_context(include: :b))
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                assert_equal(@skel.merge("a" => 1, "b" => 2), view)
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
              def test_pruned_not_included
         
     | 
| 
       53 
     | 
    
         
            -
                view, _refs = serialize_with_references(ThingView.new(@thing),
         
     | 
| 
       54 
     | 
    
         
            -
                                                        serialize_context: ThingView.new_serialize_context(include: :b, prune: :a))
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                assert_equal(@skel.merge("b" => 2), view)
         
     | 
| 
       57 
     | 
    
         
            -
              end
         
     | 
| 
       58 
     | 
    
         
            -
            end
         
     |