diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b5801c5..dfeb617 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,151 +1,91 @@ name: Tests on: push: - branches: ['*'] + branches: ['master'] pull_request: - branches: ['*'] jobs: - test_sqlite: - runs-on: ubuntu-20.04 + test: + runs-on: ubuntu-latest + + env: + RAILS_ENV: test + strategy: fail-fast: false matrix: include: - ### TEST ALL RUBY VERSIONS, USE DEFAULT GEMFILE - - ruby: 2.3 ### min version supported by Bundler 2.x - - ruby: 2.4 - - ruby: 2.5 - - ruby: 2.6 - - ruby: 2.7 - - ruby: "3.0" ### must be quoted otherwise will be treated as "3" which will resolve to latest 3.x version - - ruby: 3.1 - - ### RAILS VERSION TESTING - - ruby: 2.6 - gemfile: gemfiles/rails_5.0.sqlite3.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.1.sqlite3.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.2.sqlite3.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.0.sqlite3.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.1.sqlite3.gemfile + ### TEST RUBY VERSIONS + - ruby: "2.5" + - ruby: "2.6" + - ruby: "2.7" - ruby: "3.0" - gemfile: gemfiles/rails_7.0.sqlite3.gemfile - - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - - steps: - - uses: actions/checkout@v3 - - - name: Install ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: "${{ matrix.ruby }}" - bundler-cache: true - - - name: Run tests - run: | - bundle exec rake - + - ruby: "3.1" + - ruby: "3.2" + ### TEST RAILS VERSIONS + - ruby: "2.6" + env: + RAILS_VERSION: "5.1" + - ruby: "2.6" + env: + RAILS_VERSION: "5.2" + - ruby: "2.6" + env: + RAILS_VERSION: "6.0" + - ruby: "2.6" + env: + RAILS_VERSION: "6.1" + - ruby: "3.2" + env: + RAILS_VERSION: "7.0" + - ruby: "3.2" + env: + RAILS_VERSION: "7.1" + ### TEST NON-DEFAULT DATABASES + - ruby: "3.2" + db_gem: "mysql2" + - ruby: "3.2" + db_gem: "pg" - test_mysql: - runs-on: ubuntu-20.04 services: mysql: - image: mariadb + image: ${{ (matrix.db_gem == 'mysql2' && 'mysql') || '' }} # conditional service env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: test options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 ports: ['3306:3306'] - - strategy: - fail-fast: false - matrix: - include: - ### RAILS VERSION TESTING - ### DONT WORRY ABOUT TESTING ALL RUBY VERSIONS. THIS IS COVERED IN THE SQLITE3 TESTS - - ruby: 2.6 - gemfile: gemfiles/rails_5.0.mysql2.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.1.mysql2.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.2.mysql2.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.0.mysql2.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.1.mysql2.gemfile - - ruby: "3.0" - gemfile: gemfiles/rails_7.0.mysql2.gemfile - - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - steps: - - uses: actions/checkout@v3 - - - name: Install ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: "${{ matrix.ruby }}" - bundler-cache: true - - - name: Run tests - env: - DATABASE_URL: mysql2://root:password@127.0.0.1:3306/test - RAILS_ENV: test - run: | - bundle exec rake - - - test_pg: - runs-on: ubuntu-20.04 - services: postgres: - image: postgres + image: ${{ (matrix.db_gem == 'pg' && 'postgres') || '' }} # conditional service env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: test ports: ['5432:5432'] - strategy: - fail-fast: false - matrix: - include: - ### RAILS VERSION TESTING - ### DONT WORRY ABOUT TESTING ALL RUBY VERSIONS. THIS IS COVERED IN THE SQLITE3 TESTS - - ruby: 2.6 - gemfile: gemfiles/rails_5.0.pg.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.1.pg.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_5.2.pg.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.0.pg.gemfile - - ruby: 2.6 - gemfile: gemfiles/rails_6.1.pg.gemfile - - ruby: "3.0" - gemfile: gemfiles/rails_7.0.pg.gemfile - - env: - BUNDLE_GEMFILE: "${{ matrix.gemfile }}" - steps: - uses: actions/checkout@v3 + - name: Set env DATABASE_URL + run: | + if [[ "${{ matrix.db_gem }}" == 'mysql2' ]]; then + echo "DATABASE_URL=mysql2://root:password@127.0.0.1:3306/test" >> "$GITHUB_ENV" + elif [[ "${{ matrix.db_gem }}" == 'pg' ]]; then + echo "DATABASE_URL=postgres://postgres:password@localhost:5432/test" >> "$GITHUB_ENV" + fi + + - name: Set env DB_GEM + if: ${{ matrix.db_gem }} + run: | + echo "DB_GEM=${{ matrix.db_gem }}" >> "$GITHUB_ENV" + - name: Install ruby uses: ruby/setup-ruby@v1 with: ruby-version: "${{ matrix.ruby }}" - bundler-cache: true + bundler-cache: false ### not compatible with ENV-style Gemfile - - name: Run tests - env: - DATABASE_URL: postgres://postgres:password@localhost:5432/test - RAILS_ENV: test + - name: Run test run: | - bundle exec rake + bundle install + bundle exec rake test diff --git a/Appraisals b/Appraisals deleted file mode 100644 index 0abad9c..0000000 --- a/Appraisals +++ /dev/null @@ -1,38 +0,0 @@ -["sqlite3", "mysql2", "pg"].each do |db_gem| - - appraise "rails_7.0.#{db_gem}" do - gem "rails", "~> 7.0.0" - gem db_gem - end - - appraise "rails_6.1.#{db_gem}" do - gem "rails", "~> 6.1.1" - gem db_gem - end - - appraise "rails_6.0.#{db_gem}" do - gem "rails", "~> 6.0.3" - gem db_gem - end - - appraise "rails_5.2.#{db_gem}" do - gem "rails", "~> 5.2.4" - gem db_gem - end - - appraise "rails_5.1.#{db_gem}" do - gem "rails", "~> 5.1.7" - gem db_gem - end - - appraise "rails_5.0.#{db_gem}" do - gem "rails", "~> 5.0.7" - - if db_gem == 'sqlite3' - gem "sqlite3", "~> 1.3.13" - else - gem db_gem - end - end - -end diff --git a/Gemfile b/Gemfile index 51ce83f..3c733c0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,15 +1,12 @@ source 'https://rubygems.org' -if (RUBY_VERSION.to_f < 2.5 || false) ### set to true if locally testing old Rails version - #gem 'rails', '~> 5.0.7' - #gem 'rails', '~> 5.1.7' - gem 'rails', "~> 5.2.4" - gem 'sqlite3', '~> 1.3.13' -else - #gem 'rails', '~> 6.0.3' - #gem 'rails', '~> 6.1.1' - gem 'rails' - gem 'sqlite3' +gemspec + +def get_env(name) + (ENV[name] && !ENV[name].empty?) ? ENV[name] : nil end -gemspec +gem 'rails', get_env("RAILS_VERSION") + +db_gem = get_env("DB_GEM") || "sqlite3" +gem db_gem diff --git a/gemfiles/Rails_5.0.x.gemfile b/gemfiles/Rails_5.0.x.gemfile deleted file mode 100644 index 23d47f6..0000000 --- a/gemfiles/Rails_5.0.x.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.0.0" -gem "sqlite3", "~> 1.3.13" - -gemspec path: "../" diff --git a/gemfiles/Rails_5.1.x.gemfile b/gemfiles/Rails_5.1.x.gemfile deleted file mode 100644 index 6100e83..0000000 --- a/gemfiles/Rails_5.1.x.gemfile +++ /dev/null @@ -1,7 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.1.0" - -gemspec path: "../" diff --git a/gemfiles/Rails_5.2.x.gemfile b/gemfiles/Rails_5.2.x.gemfile deleted file mode 100644 index 5a706dc..0000000 --- a/gemfiles/Rails_5.2.x.gemfile +++ /dev/null @@ -1,7 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.2.0" - -gemspec path: "../" diff --git a/gemfiles/Rails_6.0.x.gemfile b/gemfiles/Rails_6.0.x.gemfile deleted file mode 100644 index 15b9b27..0000000 --- a/gemfiles/Rails_6.0.x.gemfile +++ /dev/null @@ -1,7 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.0" - -gemspec path: "../" diff --git a/gemfiles/Rails_6.1.x.gemfile b/gemfiles/Rails_6.1.x.gemfile deleted file mode 100644 index dd95a47..0000000 --- a/gemfiles/Rails_6.1.x.gemfile +++ /dev/null @@ -1,7 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.0" - -gemspec path: "../" diff --git a/gemfiles/rails_5.0.mysql2.gemfile b/gemfiles/rails_5.0.mysql2.gemfile deleted file mode 100644 index e06d123..0000000 --- a/gemfiles/rails_5.0.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.0.7" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_5.0.pg.gemfile b/gemfiles/rails_5.0.pg.gemfile deleted file mode 100644 index 9cf4869..0000000 --- a/gemfiles/rails_5.0.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.0.7" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_5.0.sqlite3.gemfile b/gemfiles/rails_5.0.sqlite3.gemfile deleted file mode 100644 index aef5856..0000000 --- a/gemfiles/rails_5.0.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.0.7" -gem "sqlite3", "~> 1.3.13" - -gemspec path: "../" diff --git a/gemfiles/rails_5.1.mysql2.gemfile b/gemfiles/rails_5.1.mysql2.gemfile deleted file mode 100644 index c30d6b9..0000000 --- a/gemfiles/rails_5.1.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.1.7" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_5.1.pg.gemfile b/gemfiles/rails_5.1.pg.gemfile deleted file mode 100644 index 667cebe..0000000 --- a/gemfiles/rails_5.1.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.1.7" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_5.1.sqlite3.gemfile b/gemfiles/rails_5.1.sqlite3.gemfile deleted file mode 100644 index 10a3df0..0000000 --- a/gemfiles/rails_5.1.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.1.7" -gem "sqlite3" - -gemspec path: "../" diff --git a/gemfiles/rails_5.2.mysql2.gemfile b/gemfiles/rails_5.2.mysql2.gemfile deleted file mode 100644 index 39a2c61..0000000 --- a/gemfiles/rails_5.2.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.2.4" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_5.2.pg.gemfile b/gemfiles/rails_5.2.pg.gemfile deleted file mode 100644 index a4970e1..0000000 --- a/gemfiles/rails_5.2.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.2.4" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_5.2.sqlite3.gemfile b/gemfiles/rails_5.2.sqlite3.gemfile deleted file mode 100644 index 01060f4..0000000 --- a/gemfiles/rails_5.2.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 5.2.4" -gem "sqlite3" - -gemspec path: "../" diff --git a/gemfiles/rails_6.0.mysql2.gemfile b/gemfiles/rails_6.0.mysql2.gemfile deleted file mode 100644 index f8ad0bd..0000000 --- a/gemfiles/rails_6.0.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.3" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_6.0.pg.gemfile b/gemfiles/rails_6.0.pg.gemfile deleted file mode 100644 index 6e7a298..0000000 --- a/gemfiles/rails_6.0.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.3" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_6.0.sqlite3.gemfile b/gemfiles/rails_6.0.sqlite3.gemfile deleted file mode 100644 index 04e8754..0000000 --- a/gemfiles/rails_6.0.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.3" -gem "sqlite3" - -gemspec path: "../" diff --git a/gemfiles/rails_6.1.mysql2.gemfile b/gemfiles/rails_6.1.mysql2.gemfile deleted file mode 100644 index aca3d96..0000000 --- a/gemfiles/rails_6.1.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.1" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_6.1.pg.gemfile b/gemfiles/rails_6.1.pg.gemfile deleted file mode 100644 index 9b2bde4..0000000 --- a/gemfiles/rails_6.1.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.1" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_6.1.sqlite3.gemfile b/gemfiles/rails_6.1.sqlite3.gemfile deleted file mode 100644 index 2787884..0000000 --- a/gemfiles/rails_6.1.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.1" -gem "sqlite3" - -gemspec path: "../" diff --git a/gemfiles/rails_7.0.mysql2.gemfile b/gemfiles/rails_7.0.mysql2.gemfile deleted file mode 100644 index 3d04a7e..0000000 --- a/gemfiles/rails_7.0.mysql2.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 7.0.0" -gem "sqlite3" -gem "mysql2" - -gemspec path: "../" diff --git a/gemfiles/rails_7.0.pg.gemfile b/gemfiles/rails_7.0.pg.gemfile deleted file mode 100644 index c7d0642..0000000 --- a/gemfiles/rails_7.0.pg.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 7.0.0" -gem "sqlite3" -gem "pg" - -gemspec path: "../" diff --git a/gemfiles/rails_7.0.sqlite3.gemfile b/gemfiles/rails_7.0.sqlite3.gemfile deleted file mode 100644 index 5b096eb..0000000 --- a/gemfiles/rails_7.0.sqlite3.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 7.0.0" -gem "sqlite3" - -gemspec path: "../" diff --git a/lib/active_record/mass_assignment_security.rb b/lib/active_record/mass_assignment_security.rb index 4c6edaf..21138e3 100644 --- a/lib/active_record/mass_assignment_security.rb +++ b/lib/active_record/mass_assignment_security.rb @@ -12,7 +12,7 @@ require "active_record/mass_assignment_security/associations" require "active_record/mass_assignment_security/inheritance" -class ActiveRecord::Base +ActiveRecord::Base.class_eval do include ActiveRecord::MassAssignmentSecurity::Core include ActiveRecord::MassAssignmentSecurity::AttributeAssignment include ActiveRecord::MassAssignmentSecurity::Persistence @@ -21,6 +21,6 @@ class ActiveRecord::Base include ActiveRecord::MassAssignmentSecurity::Inheritance end -class ActiveRecord::SchemaMigration < ActiveRecord::Base +ActiveRecord::SchemaMigration < ActiveRecord::Base attr_accessible :version end diff --git a/protected_attributes_continued.gemspec b/protected_attributes_continued.gemspec index fb4098a..e509a03 100644 --- a/protected_attributes_continued.gemspec +++ b/protected_attributes_continued.gemspec @@ -22,5 +22,4 @@ Gem::Specification.new do |gem| gem.add_development_dependency "actionpack", ">= 5.0" gem.add_development_dependency "railties", ">= 5.0" gem.add_development_dependency "mocha", "~> 1.4.0" - gem.add_development_dependency 'appraisal' end diff --git a/test/attribute_sanitization_test.rb b/test/attribute_sanitization_test.rb index 237989f..0102f02 100644 --- a/test/attribute_sanitization_test.rb +++ b/test/attribute_sanitization_test.rb @@ -254,13 +254,7 @@ def test_create_with_bang_with_without_protection_with_attr_protected_attributes def test_protection_against_class_attribute_writers attribute_writers = [:logger, :configurations, :primary_key_prefix_type, :table_name_prefix, :table_name_suffix, :pluralize_table_names, :lock_optimistically, :default_scopes, :connection_handler, :nested_attributes_options, - :attribute_method_matchers, :time_zone_aware_attributes, :skip_time_zone_conversion_for_attributes] - - if Rails::VERSION::MAJOR <= 6 - attribute_writers += [:default_timezone, :schema_format, :timestamped_migrations] - end - - attribute_writers.push(:_attr_readonly) if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0 + :time_zone_aware_attributes, :skip_time_zone_conversion_for_attributes] attribute_writers.each do |method| assert_respond_to Task, method