diff --git a/.github/workflows/test_ruby_3_0.yml b/.github/workflows/test_ruby_3_0.yml index 06a92116..88e04b7f 100644 --- a/.github/workflows/test_ruby_3_0.yml +++ b/.github/workflows/test_ruby_3_0.yml @@ -1,5 +1,5 @@ -name: Exec Rspec -run-name: Matrix building for ruby 3.0 ✖️ 【rails 6.0 - 6.1】 🚀 +name: Exec Rspec (Ruby 3.0) +run-name: Matrix building for ruby 3.0 ✖️ 【rails 7.x】 🚀 on: [push] jobs: @@ -7,8 +7,8 @@ jobs: strategy: fail-fast: false matrix: - arversion: ['6_0_6', - '6_1_0', '6_1_1', '6_1_2', '6_1_3', '6_1_4', '6_1_5', '6_1_6', '6_1_7'] + arversion: ['7_0_6', '7_0_7', '7_0_8', + '7_1_2', '7_1_3', '7_1_4'] runs-on: ubuntu-22.04 env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile diff --git a/.github/workflows/test_ruby_3_0_trilogy.yml b/.github/workflows/test_ruby_3_0_trilogy.yml index 965573e2..990f7f7e 100644 --- a/.github/workflows/test_ruby_3_0_trilogy.yml +++ b/.github/workflows/test_ruby_3_0_trilogy.yml @@ -1,5 +1,5 @@ -name: Exec Rspec -run-name: Matrix building for ruby 3.0 ✖️ 【rails 6.0】✖️ Trilogy 🚀 +name: Exec Rspec (Ruby 3.0 + Trilogy) +run-name: Matrix building for ruby 3.0 ✖️ 【rails 7.x】✖️ Trilogy 🚀 on: [push] jobs: @@ -7,7 +7,7 @@ jobs: strategy: fail-fast: false matrix: - arversion: ['6_0_6_trilogy', '6_1_7_trilogy'] + arversion: ['7_0_8_trilogy', '7_1_4_trilogy'] runs-on: ubuntu-22.04 env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile diff --git a/.github/workflows/test_ruby_3_2.yml b/.github/workflows/test_ruby_3_2.yml index 0d72c963..f5838fca 100644 --- a/.github/workflows/test_ruby_3_2.yml +++ b/.github/workflows/test_ruby_3_2.yml @@ -1,5 +1,5 @@ -name: Exec Rspec -run-name: Matrix building for ruby 3.2 ✖️ 【rails 6.1】 🚀 +name: Exec Rspec (Ruby 3.2) +run-name: Matrix building for ruby 3.2 ✖️ 【rails 7.x】 🚀 on: [push] jobs: @@ -7,7 +7,8 @@ jobs: strategy: fail-fast: false matrix: - arversion: ['6_1_0', '6_1_1', '6_1_2', '6_1_3', '6_1_4', '6_1_5', '6_1_6', '6_1_7'] + arversion: ['7_0_6', '7_0_7', '7_0_8', + '7_1_2', '7_1_3', '7_1_4'] runs-on: ubuntu-22.04 env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile diff --git a/.github/workflows/test_ruby_3_2_trilogy.yml b/.github/workflows/test_ruby_3_2_trilogy.yml index 0ea066fd..406e672f 100644 --- a/.github/workflows/test_ruby_3_2_trilogy.yml +++ b/.github/workflows/test_ruby_3_2_trilogy.yml @@ -1,13 +1,13 @@ -name: Exec Rspec -run-name: Matrix building for ruby 3.2 ✖️ 【rails 6.1】✖️ Trilogy 🚀 +name: Exec Rspec (Ruby 3.2 + Trilogy) +run-name: Matrix building for ruby 3.2 ✖️ 【rails 7.x】✖️ Trilogy 🚀 on: [push] jobs: - ruby_3_0: + ruby_3_2: strategy: fail-fast: false matrix: - arversion: ['6_0_6_trilogy', '6_1_7_trilogy'] + arversion: ['7_0_8_trilogy', '7_1_4_trilogy'] runs-on: ubuntu-22.04 env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile diff --git a/.github/workflows/test_ruby_2_7.yml b/.github/workflows/test_ruby_3_3.yml similarity index 55% rename from .github/workflows/test_ruby_2_7.yml rename to .github/workflows/test_ruby_3_3.yml index d9c95dbb..08d95286 100644 --- a/.github/workflows/test_ruby_2_7.yml +++ b/.github/workflows/test_ruby_3_3.yml @@ -1,17 +1,14 @@ -name: Exec Rspec -run-name: Matrix building for ruby 2.7 ✖️ 【rails 5.0 - 6.1】 🚀 +name: Exec Rspec (Ruby 3.3) +run-name: Matrix building for ruby 3.3 ✖️ 【rails 7.x】 🚀 on: [push] jobs: - ruby_2_7: + ruby_3_3: strategy: fail-fast: false matrix: - arversion: ['5_0_5', '5_0_6', '5_0_7', - '5_1_3', '5_1_4', '5_1_5', '5_1_6', '5_1_7', - '5_2_0', '5_2_1', '5_2_2', '5_2_3', '5_2_4', '5_2_5', '5_2_6', '5_2_7', '5_2_8', - '6_0_0', '6_0_1', '6_0_2', '6_0_3', '6_0_4', '6_0_5', '6_0_6', - '6_1_0', '6_1_1', '6_1_2', '6_1_3', '6_1_4', '6_1_5', '6_1_6', '6_1_7'] + arversion: ['7_0_6', '7_0_7', '7_0_8', + '7_1_2', '7_1_3', '7_1_4'] runs-on: ubuntu-22.04 env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile @@ -22,7 +19,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' + ruby-version: '3.3' bundler: latest bundler-cache: true - name: Start mysql diff --git a/.github/workflows/test_ruby_3_3_trilogy.yml b/.github/workflows/test_ruby_3_3_trilogy.yml new file mode 100644 index 00000000..b2465f79 --- /dev/null +++ b/.github/workflows/test_ruby_3_3_trilogy.yml @@ -0,0 +1,33 @@ +name: Exec Rspec (Ruby 3.3 + Trilogy) +run-name: Matrix building for ruby 3.3 ✖️ 【rails 7.x】✖️ Trilogy 🚀 +on: [push] + +jobs: + ruby_3_3: + strategy: + fail-fast: false + matrix: + arversion: ['7_0_8_trilogy', '7_1_4_trilogy'] + runs-on: ubuntu-22.04 + env: + BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails${{ matrix.arversion }}.gemfile + MYSQL_PWD: root + DATABASE_ADAPTER: trilogy + DATABASE_PASSWORD: root + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + bundler: latest + bundler-cache: true + - name: Start mysql + run: | + sudo systemctl start mysql.service + mysql -h 127.0.0.1 --port 3306 -u root --password=root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" + - name: Reset DB + run: bundle exec rake turntable:db:reset + - name: Run RSpec + run: RUBYOPT='-W:deprecated' bundle exec rake spec diff --git a/Appraisals b/Appraisals index 708069e8..da53760c 100644 --- a/Appraisals +++ b/Appraisals @@ -1,152 +1,75 @@ -appraise "rails6_0_0" do - gem "rails", "6.0.0" - gem "railties", "6.0.0" - gem "activerecord", "6.0.0" - gem "activesupport", "6.0.0" - gem "actionview", "6.0.0" +appraise "rails7_0_6" do + gem "rails", "~> 7.0.6.0" + gem "railties", "~> 7.0.6.0" + gem "activerecord", "~> 7.0.6.0" + gem "activesupport", "~> 7.0.6.0" + gem "actionview", "~> 7.0.6.0" gem "mysql2", "~> 0.5.2" + gem "concurrent-ruby", "< 1.3.5" end -appraise "rails6_0_1" do - gem "rails", "6.0.1" - gem "railties", "6.0.1" - gem "activerecord", "6.0.1" - gem "activesupport", "6.0.1" - gem "actionview", "6.0.1" +appraise "rails7_0_7" do + gem "rails", "~> 7.0.7.0" + gem "railties", "~> 7.0.7.0" + gem "activerecord", "~> 7.0.7.0" + gem "activesupport", "~> 7.0.7.0" + gem "actionview", "~> 7.0.7.0" gem "mysql2", "~> 0.5.2" + gem "concurrent-ruby", "< 1.3.5" end -appraise "rails6_0_2" do - gem "rails", "6.0.2" - gem "railties", "6.0.2" - gem "activerecord", "6.0.2" - gem "activesupport", "6.0.2" - gem "actionview", "6.0.2" +appraise "rails7_0_8" do + gem "rails", "~> 7.0.8.0" + gem "railties", "~> 7.0.8.0" + gem "activerecord", "~> 7.0.8.0" + gem "activesupport", "~> 7.0.8.0" + gem "actionview", "~> 7.0.8.0" gem "mysql2", "~> 0.5.2" + gem "concurrent-ruby", "< 1.3.5" end -appraise "rails6_0_3" do - gem "rails", "6.0.3" - gem "railties", "6.0.3" - gem "activerecord", "6.0.3" - gem "activesupport", "6.0.3" - gem "actionview", "6.0.3" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_0_4" do - gem "rails", "6.0.4" - gem "railties", "6.0.4" - gem "activerecord", "6.0.4" - gem "activesupport", "6.0.4" - gem "actionview", "6.0.4" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_0_5" do - gem "rails", "6.0.5" - gem "railties", "6.0.5" - gem "activerecord", "6.0.5" - gem "activesupport", "6.0.5" - gem "actionview", "6.0.5" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_0_6" do - gem "rails", "~> 6.0.6.1" - gem "railties", "~> 6.0.6.1" - gem "activerecord", "~> 6.0.6.1" - gem "activesupport", "~> 6.0.6.1" - gem "actionview", "~> 6.0.6.1" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_0_6_trilogy" do - gem "rails", "~> 6.0.6.1" - gem "railties", "~> 6.0.6.1" - gem "activerecord", "~> 6.0.6.1" +appraise "rails7_0_8_trilogy" do + gem "rails", "~> 7.0.8.0" + gem "railties", "~> 7.0.8.0" + gem "activerecord", "~> 7.0.8.0" gem "activerecord-trilogy-adapter", "~> 3.1.2" - gem "activesupport", "~> 6.0.6.1" - gem "actionview", "~> 6.0.6.1" + gem "activesupport", "~> 7.0.8.0" + gem "actionview", "~> 7.0.8.0" + gem "concurrent-ruby", "< 1.3.5" end -appraise "rails6_1_0" do - gem "rails", "~> 6.1.0.0" - gem "railties", "~> 6.1.0.0" - gem "activerecord", "~> 6.1.0.0" - gem "activesupport", "~> 6.1.0.0" - gem "actionview", "~> 6.1.0.0" +appraise "rails7_1_2" do + gem "rails", "~> 7.1.2.0" + gem "railties", "~> 7.1.2.0" + gem "activerecord", "~> 7.1.2.0" + gem "activesupport", "~> 7.1.2.0" + gem "actionview", "~> 7.1.2.0" gem "mysql2", "~> 0.5.2" end -appraise "rails6_1_1" do - gem "rails", "~> 6.1.1.0" - gem "railties", "~> 6.1.1.0" - gem "activerecord", "~> 6.1.1.0" - gem "activesupport", "~> 6.1.1.0" - gem "actionview", "~> 6.1.1.0" +appraise "rails7_1_3" do + gem "rails", "~> 7.1.3.0" + gem "railties", "~> 7.1.3.0" + gem "activerecord", "~> 7.1.3.0" + gem "activesupport", "~> 7.1.3.0" + gem "actionview", "~> 7.1.3.0" gem "mysql2", "~> 0.5.2" end -appraise "rails6_1_2" do - gem "rails", "~> 6.1.2.0" - gem "railties", "~> 6.1.2.0" - gem "activerecord", "~> 6.1.2.0" - gem "activesupport", "~> 6.1.2.0" - gem "actionview", "~> 6.1.2.0" +appraise "rails7_1_4" do + gem "rails", "~> 7.1.4.0" + gem "railties", "~> 7.1.4.0" + gem "activerecord", "~> 7.1.4.0" + gem "activesupport", "~> 7.1.4.0" + gem "actionview", "~> 7.1.4.0" gem "mysql2", "~> 0.5.2" end -appraise "rails6_1_3" do - gem "rails", "~> 6.1.3.0" - gem "railties", "~> 6.1.3.0" - gem "activerecord", "~> 6.1.3.0" - gem "activesupport", "~> 6.1.3.0" - gem "actionview", "~> 6.1.3.0" - gem "mysql2", "~> 0.5.2" +appraise "rails7_1_4_trilogy" do + gem "rails", "~> 7.1.4.0" + gem "railties", "~> 7.1.4.0" + gem "activerecord", "~> 7.1.4.0" + gem "activesupport", "~> 7.1.4.0" + gem "actionview", "~> 7.1.4.0" + gem "trilogy", "~> 2.8.1" end - -appraise "rails6_1_4" do - gem "rails", "~> 6.1.4.0" - gem "railties", "~> 6.1.4.0" - gem "activerecord", "~> 6.1.4.0" - gem "activesupport", "~> 6.1.4.0" - gem "actionview", "~> 6.1.4.0" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_1_5" do - gem "rails", "~> 6.1.5.0" - gem "railties", "~> 6.1.5.0" - gem "activerecord", "~> 6.1.5.0" - gem "activesupport", "~> 6.1.5.0" - gem "actionview", "~> 6.1.5.0" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_1_6" do - gem "rails", "~> 6.1.6.0" - gem "railties", "~> 6.1.6.0" - gem "activerecord", "~> 6.1.6.0" - gem "activesupport", "~> 6.1.6.0" - gem "actionview", "~> 6.1.6.0" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_1_7" do - gem "rails", "~> 6.1.7.0" - gem "railties", "~> 6.1.7.0" - gem "activerecord", "~> 6.1.7.0" - gem "activesupport", "~> 6.1.7.0" - gem "actionview", "~> 6.1.7.0" - gem "mysql2", "~> 0.5.2" -end - -appraise "rails6_1_7_trilogy" do - gem "rails", "~> 6.1.7.0" - gem "railties", "~> 6.1.7.0" - gem "activerecord", "~> 6.1.7.0" - gem "activerecord-trilogy-adapter", "~> 3.1.2" - gem "activesupport", "~> 6.1.7.0" - gem "actionview", "~> 6.1.7.0" -end \ No newline at end of file diff --git a/Gemfile b/Gemfile index 9b9177f1..9885bb2f 100644 --- a/Gemfile +++ b/Gemfile @@ -2,8 +2,8 @@ source "https://rubygems.org" gemspec -gem "rails", "6.1.7.7" +gem "rails", "7.0.8.4" -gem "actionview", "6.1.7.7" -gem "activerecord", "6.1.7.7" -gem "activesupport", "6.1.7.7" +gem "actionview", "7.0.8.4" +gem "activerecord", "7.0.8.4" +gem "activesupport", "7.0.8.4" diff --git a/Rakefile b/Rakefile index 089723fa..594e7b74 100644 --- a/Rakefile +++ b/Rakefile @@ -9,7 +9,7 @@ end require "active_record" ActiveSupport.on_load(:active_record) do - if ENV["DATABASE_ADAPTER"] == "trilogy" + if ENV["DATABASE_ADAPTER"] == "trilogy" && !ActiveRecord::Turntable::Util.ar71_or_later? require "trilogy_adapter/connection" ActiveRecord::Base.public_send :extend, TrilogyAdapter::Connection end @@ -49,7 +49,7 @@ namespace :turntable do ActiveRecord::Base.include(ActiveRecord::Turntable) ActiveRecord::ConnectionAdapters::SchemaStatements.include(ActiveRecord::Turntable::Migration::SchemaStatementsExt) - configurations = [ActiveRecord::Base.configurations[RAILS_ENV]] + configurations = ActiveRecord::Base.configurations.configs_for(env_name: RAILS_ENV) configurations += ActiveRecord::Tasks::DatabaseTasks.current_turntable_cluster_configurations(RAILS_ENV).map { |v| v[1] }.flatten.uniq configurations.each do |configuration| diff --git a/activerecord-turntable.gemspec b/activerecord-turntable.gemspec index d0ddd1be..4f4da717 100644 --- a/activerecord-turntable.gemspec +++ b/activerecord-turntable.gemspec @@ -23,8 +23,8 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.required_ruby_version = ">= 2.2.2" - spec.add_runtime_dependency "activerecord", ">= 5.0", "< 7.0" - spec.add_runtime_dependency "activesupport", ">= 5.0", "< 7.0" + spec.add_runtime_dependency "activerecord", ">= 7.0", "< 8.0" + spec.add_runtime_dependency "activesupport", ">= 7.0", "< 8.0" spec.add_runtime_dependency "bsearch", "~> 1.5" spec.add_runtime_dependency "sql_tree", "= 0.2.0" spec.add_runtime_dependency "thread_safe" @@ -40,6 +40,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "guard-rubocop" spec.add_development_dependency "httpclient", ">= 0" spec.add_development_dependency "mysql2", ">= 0.4.4", "< 0.6.0" + spec.add_development_dependency "trilogy", ">= 2.4.0" spec.add_development_dependency "onkcop" spec.add_development_dependency "pry" spec.add_development_dependency "pry-byebug" @@ -50,7 +51,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rspec-collection_matchers" spec.add_development_dependency "rspec-its" spec.add_development_dependency "rspec-parameterized" - spec.add_development_dependency "rspec-rails", "~> 4.1.0" + spec.add_development_dependency "rspec-rails", ">= 6.1.0" spec.add_development_dependency "rubocop" spec.add_development_dependency "rubocop-rspec" spec.add_development_dependency "timecop" diff --git a/gemfiles/rails5_0_0.gemfile b/gemfiles/rails5_0_0.gemfile deleted file mode 100644 index 0012fa6f..00000000 --- a/gemfiles/rails5_0_0.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.0" -gem "railties", "5.0.0" -gem "activerecord", "5.0.0" -gem "activesupport", "5.0.0" -gem "actionview", "5.0.0" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_1.gemfile b/gemfiles/rails5_0_1.gemfile deleted file mode 100644 index c0f5d7af..00000000 --- a/gemfiles/rails5_0_1.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.1" -gem "railties", "5.0.1" -gem "activerecord", "5.0.1" -gem "activesupport", "5.0.1" -gem "actionview", "5.0.1" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_2.gemfile b/gemfiles/rails5_0_2.gemfile deleted file mode 100644 index e9a24164..00000000 --- a/gemfiles/rails5_0_2.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.2" -gem "railties", "5.0.2" -gem "activerecord", "5.0.2" -gem "activesupport", "5.0.2" -gem "actionview", "5.0.2" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_3.gemfile b/gemfiles/rails5_0_3.gemfile deleted file mode 100644 index bef73186..00000000 --- a/gemfiles/rails5_0_3.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.3" -gem "railties", "5.0.3" -gem "activerecord", "5.0.3" -gem "activesupport", "5.0.3" -gem "actionview", "5.0.3" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_4.gemfile b/gemfiles/rails5_0_4.gemfile deleted file mode 100644 index 2fb96bb0..00000000 --- a/gemfiles/rails5_0_4.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.4" -gem "railties", "5.0.4" -gem "activerecord", "5.0.4" -gem "activesupport", "5.0.4" -gem "actionview", "5.0.4" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_5.gemfile b/gemfiles/rails5_0_5.gemfile deleted file mode 100644 index 4d6b87c7..00000000 --- a/gemfiles/rails5_0_5.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.5" -gem "railties", "5.0.5" -gem "activerecord", "5.0.5" -gem "activesupport", "5.0.5" -gem "actionview", "5.0.5" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_6.gemfile b/gemfiles/rails5_0_6.gemfile deleted file mode 100644 index afc171c5..00000000 --- a/gemfiles/rails5_0_6.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.6" -gem "railties", "5.0.6" -gem "activerecord", "5.0.6" -gem "activesupport", "5.0.6" -gem "actionview", "5.0.6" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_0_7.gemfile b/gemfiles/rails5_0_7.gemfile deleted file mode 100644 index dfa736f2..00000000 --- a/gemfiles/rails5_0_7.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.0.7" -gem "railties", "5.0.7" -gem "activerecord", "5.0.7" -gem "activesupport", "5.0.7" -gem "actionview", "5.0.7" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_0.gemfile b/gemfiles/rails5_1_0.gemfile deleted file mode 100644 index cc6502f1..00000000 --- a/gemfiles/rails5_1_0.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.0" -gem "railties", "5.1.0" -gem "activerecord", "5.1.0" -gem "activesupport", "5.1.0" -gem "actionview", "5.1.0" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_1.gemfile b/gemfiles/rails5_1_1.gemfile deleted file mode 100644 index 66f5e3fa..00000000 --- a/gemfiles/rails5_1_1.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.1" -gem "railties", "5.1.1" -gem "activerecord", "5.1.1" -gem "activesupport", "5.1.1" -gem "actionview", "5.1.1" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_2.gemfile b/gemfiles/rails5_1_2.gemfile deleted file mode 100644 index 4b0db053..00000000 --- a/gemfiles/rails5_1_2.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.2" -gem "railties", "5.1.2" -gem "activerecord", "5.1.2" -gem "activesupport", "5.1.2" -gem "actionview", "5.1.2" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_3.gemfile b/gemfiles/rails5_1_3.gemfile deleted file mode 100644 index 31e56c31..00000000 --- a/gemfiles/rails5_1_3.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.3" -gem "railties", "5.1.3" -gem "activerecord", "5.1.3" -gem "activesupport", "5.1.3" -gem "actionview", "5.1.3" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_4.gemfile b/gemfiles/rails5_1_4.gemfile deleted file mode 100644 index f2e0e12a..00000000 --- a/gemfiles/rails5_1_4.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.4" -gem "railties", "5.1.4" -gem "activerecord", "5.1.4" -gem "activesupport", "5.1.4" -gem "actionview", "5.1.4" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_5.gemfile b/gemfiles/rails5_1_5.gemfile deleted file mode 100644 index 00b9894b..00000000 --- a/gemfiles/rails5_1_5.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.5" -gem "railties", "5.1.5" -gem "activerecord", "5.1.5" -gem "activesupport", "5.1.5" -gem "actionview", "5.1.5" -gem "mysql2", "~> 0.4.4" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_6.gemfile b/gemfiles/rails5_1_6.gemfile deleted file mode 100644 index 75291519..00000000 --- a/gemfiles/rails5_1_6.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.6" -gem "railties", "5.1.6" -gem "activerecord", "5.1.6" -gem "activesupport", "5.1.6" -gem "actionview", "5.1.6" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_1_7.gemfile b/gemfiles/rails5_1_7.gemfile deleted file mode 100644 index dd03b9b3..00000000 --- a/gemfiles/rails5_1_7.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.1.7" -gem "railties", "5.1.7" -gem "activerecord", "5.1.7" -gem "activesupport", "5.1.7" -gem "actionview", "5.1.7" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' \ No newline at end of file diff --git a/gemfiles/rails5_2_0.gemfile b/gemfiles/rails5_2_0.gemfile deleted file mode 100644 index dbb7b8df..00000000 --- a/gemfiles/rails5_2_0.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.0" -gem "railties", "5.2.0" -gem "activerecord", "5.2.0" -gem "activesupport", "5.2.0" -gem "actionview", "5.2.0" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_1.gemfile b/gemfiles/rails5_2_1.gemfile deleted file mode 100644 index 9d4b5e02..00000000 --- a/gemfiles/rails5_2_1.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.1" -gem "railties", "5.2.1" -gem "activerecord", "5.2.1" -gem "activesupport", "5.2.1" -gem "actionview", "5.2.1" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_2.gemfile b/gemfiles/rails5_2_2.gemfile deleted file mode 100644 index c0a0d571..00000000 --- a/gemfiles/rails5_2_2.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.2" -gem "railties", "5.2.2" -gem "activerecord", "5.2.2" -gem "activesupport", "5.2.2" -gem "actionview", "5.2.2" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_3.gemfile b/gemfiles/rails5_2_3.gemfile deleted file mode 100644 index 75420fc5..00000000 --- a/gemfiles/rails5_2_3.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.3" -gem "railties", "5.2.3" -gem "activerecord", "5.2.3" -gem "activesupport", "5.2.3" -gem "actionview", "5.2.3" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_4.gemfile b/gemfiles/rails5_2_4.gemfile deleted file mode 100644 index 2b4f00a2..00000000 --- a/gemfiles/rails5_2_4.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.4" -gem "railties", "5.2.4" -gem "activerecord", "5.2.4" -gem "activesupport", "5.2.4" -gem "actionview", "5.2.4" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_5.gemfile b/gemfiles/rails5_2_5.gemfile deleted file mode 100644 index 5ef148e9..00000000 --- a/gemfiles/rails5_2_5.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.5" -gem "railties", "5.2.5" -gem "activerecord", "5.2.5" -gem "activesupport", "5.2.5" -gem "actionview", "5.2.5" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_6.gemfile b/gemfiles/rails5_2_6.gemfile deleted file mode 100644 index 8bb748ef..00000000 --- a/gemfiles/rails5_2_6.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.6" -gem "railties", "5.2.6" -gem "activerecord", "5.2.6" -gem "activesupport", "5.2.6" -gem "actionview", "5.2.6" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_7.gemfile b/gemfiles/rails5_2_7.gemfile deleted file mode 100644 index cc489b87..00000000 --- a/gemfiles/rails5_2_7.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.7" -gem "railties", "5.2.7" -gem "activerecord", "5.2.7" -gem "activesupport", "5.2.7" -gem "actionview", "5.2.7" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails5_2_8.gemfile b/gemfiles/rails5_2_8.gemfile deleted file mode 100644 index 4c6bda53..00000000 --- a/gemfiles/rails5_2_8.gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source "https://rubygems.org" - -gem "rails", "5.2.8" -gem "railties", "5.2.8" -gem "activerecord", "5.2.8" -gem "activesupport", "5.2.8" -gem "actionview", "5.2.8" -gem "mysql2", "~> 0.5.2" - -gem "nokogiri", "~> 1.10" if RUBY_VERSION.to_f < 2.5 -gem "loofah", "2.20.0" if RUBY_VERSION.to_f < 2.5 -gem "dalli", "~> 2.7" if RUBY_VERSION.to_f < 2.5 - -gemspec :path => '../' diff --git a/gemfiles/rails6_0_0.gemfile b/gemfiles/rails6_0_0.gemfile deleted file mode 100644 index 74ed8045..00000000 --- a/gemfiles/rails6_0_0.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.0" -gem "actionview", "6.0.0" -gem "activerecord", "6.0.0" -gem "activesupport", "6.0.0" -gem "railties", "6.0.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_1.gemfile b/gemfiles/rails6_0_1.gemfile deleted file mode 100644 index 2b3072fe..00000000 --- a/gemfiles/rails6_0_1.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.1" -gem "actionview", "6.0.1" -gem "activerecord", "6.0.1" -gem "activesupport", "6.0.1" -gem "railties", "6.0.1" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_2.gemfile b/gemfiles/rails6_0_2.gemfile deleted file mode 100644 index 03f35902..00000000 --- a/gemfiles/rails6_0_2.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.2" -gem "actionview", "6.0.2" -gem "activerecord", "6.0.2" -gem "activesupport", "6.0.2" -gem "railties", "6.0.2" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_3.gemfile b/gemfiles/rails6_0_3.gemfile deleted file mode 100644 index 6d8e067f..00000000 --- a/gemfiles/rails6_0_3.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.3" -gem "actionview", "6.0.3" -gem "activerecord", "6.0.3" -gem "activesupport", "6.0.3" -gem "railties", "6.0.3" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_4.gemfile b/gemfiles/rails6_0_4.gemfile deleted file mode 100644 index 56ef7a90..00000000 --- a/gemfiles/rails6_0_4.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.4" -gem "actionview", "6.0.4" -gem "activerecord", "6.0.4" -gem "activesupport", "6.0.4" -gem "railties", "6.0.4" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_5.gemfile b/gemfiles/rails6_0_5.gemfile deleted file mode 100644 index c4d78a17..00000000 --- a/gemfiles/rails6_0_5.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "6.0.5" -gem "actionview", "6.0.5" -gem "activerecord", "6.0.5" -gem "activesupport", "6.0.5" -gem "railties", "6.0.5" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_6.gemfile b/gemfiles/rails6_0_6.gemfile deleted file mode 100644 index fa9ff8e8..00000000 --- a/gemfiles/rails6_0_6.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.6.1" -gem "actionview", "~> 6.0.6.1" -gem "activerecord", "~> 6.0.6.1" -gem "activesupport", "~> 6.0.6.1" -gem "railties", "~> 6.0.6.1" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_0_6_trilogy.gemfile b/gemfiles/rails6_0_6_trilogy.gemfile deleted file mode 100644 index ba66ce2b..00000000 --- a/gemfiles/rails6_0_6_trilogy.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.0.6.1" -gem "actionview", "~> 6.0.6.1" -gem "activerecord", "~> 6.0.6.1" -gem "activesupport", "~> 6.0.6.1" -gem "railties", "~> 6.0.6.1" -gem "activerecord-trilogy-adapter", "~> 3.1.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_0.gemfile b/gemfiles/rails6_1_0.gemfile deleted file mode 100644 index a426c1ee..00000000 --- a/gemfiles/rails6_1_0.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.0.0" -gem "actionview", "~> 6.1.0.0" -gem "activerecord", "~> 6.1.0.0" -gem "activesupport", "~> 6.1.0.0" -gem "railties", "~> 6.1.0.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_1.gemfile b/gemfiles/rails6_1_1.gemfile deleted file mode 100644 index 4bec8b96..00000000 --- a/gemfiles/rails6_1_1.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.1.0" -gem "actionview", "~> 6.1.1.0" -gem "activerecord", "~> 6.1.1.0" -gem "activesupport", "~> 6.1.1.0" -gem "railties", "~> 6.1.1.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_2.gemfile b/gemfiles/rails6_1_2.gemfile deleted file mode 100644 index 5f11cc32..00000000 --- a/gemfiles/rails6_1_2.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.2.0" -gem "actionview", "~> 6.1.2.0" -gem "activerecord", "~> 6.1.2.0" -gem "activesupport", "~> 6.1.2.0" -gem "railties", "~> 6.1.2.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_3.gemfile b/gemfiles/rails6_1_3.gemfile deleted file mode 100644 index 6be64c69..00000000 --- a/gemfiles/rails6_1_3.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.3.0" -gem "actionview", "~> 6.1.3.0" -gem "activerecord", "~> 6.1.3.0" -gem "activesupport", "~> 6.1.3.0" -gem "railties", "~> 6.1.3.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_4.gemfile b/gemfiles/rails6_1_4.gemfile deleted file mode 100644 index f831f1e3..00000000 --- a/gemfiles/rails6_1_4.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.4.0" -gem "actionview", "~> 6.1.4.0" -gem "activerecord", "~> 6.1.4.0" -gem "activesupport", "~> 6.1.4.0" -gem "railties", "~> 6.1.4.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_5.gemfile b/gemfiles/rails6_1_5.gemfile deleted file mode 100644 index bfc00e06..00000000 --- a/gemfiles/rails6_1_5.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.5.0" -gem "actionview", "~> 6.1.5.0" -gem "activerecord", "~> 6.1.5.0" -gem "activesupport", "~> 6.1.5.0" -gem "railties", "~> 6.1.5.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_6.gemfile b/gemfiles/rails6_1_6.gemfile deleted file mode 100644 index 677b829b..00000000 --- a/gemfiles/rails6_1_6.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.6.0" -gem "actionview", "~> 6.1.6.0" -gem "activerecord", "~> 6.1.6.0" -gem "activesupport", "~> 6.1.6.0" -gem "railties", "~> 6.1.6.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_7.gemfile b/gemfiles/rails6_1_7.gemfile deleted file mode 100644 index 0fdebe65..00000000 --- a/gemfiles/rails6_1_7.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.7.0" -gem "actionview", "~> 6.1.7.0" -gem "activerecord", "~> 6.1.7.0" -gem "activesupport", "~> 6.1.7.0" -gem "railties", "~> 6.1.7.0" -gem "mysql2", "~> 0.5.2" - -gemspec path: "../" diff --git a/gemfiles/rails6_1_7_trilogy.gemfile b/gemfiles/rails6_1_7_trilogy.gemfile deleted file mode 100644 index e739782c..00000000 --- a/gemfiles/rails6_1_7_trilogy.gemfile +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rails", "~> 6.1.7.0" -gem "actionview", "~> 6.1.7.0" -gem "activerecord", "~> 6.1.7.0" -gem "activesupport", "~> 6.1.7.0" -gem "railties", "~> 6.1.7.0" -gem "activerecord-trilogy-adapter", "~> 3.1.2" - -gemspec path: "../" diff --git a/gemfiles/rails7_0_6.gemfile b/gemfiles/rails7_0_6.gemfile new file mode 100644 index 00000000..4075c714 --- /dev/null +++ b/gemfiles/rails7_0_6.gemfile @@ -0,0 +1,13 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.0.6.0" +gem "actionview", "~> 7.0.6.0" +gem "activerecord", "~> 7.0.6.0" +gem "activesupport", "~> 7.0.6.0" +gem "railties", "~> 7.0.6.0" +gem "mysql2", "~> 0.5.2" +gem "concurrent-ruby", "< 1.3.5" + +gemspec path: "../" diff --git a/gemfiles/rails7_0_7.gemfile b/gemfiles/rails7_0_7.gemfile new file mode 100644 index 00000000..23404752 --- /dev/null +++ b/gemfiles/rails7_0_7.gemfile @@ -0,0 +1,13 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.0.7.0" +gem "actionview", "~> 7.0.7.0" +gem "activerecord", "~> 7.0.7.0" +gem "activesupport", "~> 7.0.7.0" +gem "railties", "~> 7.0.7.0" +gem "mysql2", "~> 0.5.2" +gem "concurrent-ruby", "< 1.3.5" + +gemspec path: "../" diff --git a/gemfiles/rails7_0_8.gemfile b/gemfiles/rails7_0_8.gemfile new file mode 100644 index 00000000..d34f4985 --- /dev/null +++ b/gemfiles/rails7_0_8.gemfile @@ -0,0 +1,13 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.0.8.0" +gem "actionview", "~> 7.0.8.0" +gem "activerecord", "~> 7.0.8.0" +gem "activesupport", "~> 7.0.8.0" +gem "railties", "~> 7.0.8.0" +gem "mysql2", "~> 0.5.2" +gem "concurrent-ruby", "< 1.3.5" + +gemspec path: "../" diff --git a/gemfiles/rails7_0_8_trilogy.gemfile b/gemfiles/rails7_0_8_trilogy.gemfile new file mode 100644 index 00000000..94ee703f --- /dev/null +++ b/gemfiles/rails7_0_8_trilogy.gemfile @@ -0,0 +1,13 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.0.8.0" +gem "actionview", "~> 7.0.8.0" +gem "activerecord", "~> 7.0.8.0" +gem "activesupport", "~> 7.0.8.0" +gem "railties", "~> 7.0.8.0" +gem "activerecord-trilogy-adapter", "~> 3.1.2" +gem "concurrent-ruby", "< 1.3.5" + +gemspec path: "../" diff --git a/gemfiles/rails7_1_2.gemfile b/gemfiles/rails7_1_2.gemfile new file mode 100644 index 00000000..2a6fda6f --- /dev/null +++ b/gemfiles/rails7_1_2.gemfile @@ -0,0 +1,12 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.1.2.0" +gem "actionview", "~> 7.1.2.0" +gem "activerecord", "~> 7.1.2.0" +gem "activesupport", "~> 7.1.2.0" +gem "railties", "~> 7.1.2.0" +gem "mysql2", "~> 0.5.2" + +gemspec path: "../" diff --git a/gemfiles/rails7_1_3.gemfile b/gemfiles/rails7_1_3.gemfile new file mode 100644 index 00000000..9fd32d11 --- /dev/null +++ b/gemfiles/rails7_1_3.gemfile @@ -0,0 +1,12 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.1.3.0" +gem "actionview", "~> 7.1.3.0" +gem "activerecord", "~> 7.1.3.0" +gem "activesupport", "~> 7.1.3.0" +gem "railties", "~> 7.1.3.0" +gem "mysql2", "~> 0.5.2" + +gemspec path: "../" diff --git a/gemfiles/rails7_1_4.gemfile b/gemfiles/rails7_1_4.gemfile new file mode 100644 index 00000000..ff261c69 --- /dev/null +++ b/gemfiles/rails7_1_4.gemfile @@ -0,0 +1,12 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.1.4.0" +gem "actionview", "~> 7.1.4.0" +gem "activerecord", "~> 7.1.4.0" +gem "activesupport", "~> 7.1.4.0" +gem "railties", "~> 7.1.4.0" +gem "mysql2", "~> 0.5.2" + +gemspec path: "../" diff --git a/gemfiles/rails7_1_4_trilogy.gemfile b/gemfiles/rails7_1_4_trilogy.gemfile new file mode 100644 index 00000000..6f1bb56e --- /dev/null +++ b/gemfiles/rails7_1_4_trilogy.gemfile @@ -0,0 +1,12 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 7.1.4.0" +gem "actionview", "~> 7.1.4.0" +gem "activerecord", "~> 7.1.4.0" +gem "activesupport", "~> 7.1.4.0" +gem "railties", "~> 7.1.4.0" +gem "trilogy", "~> 2.8.1" + +gemspec path: "../" diff --git a/gemfiles/rails_edge.gemfile b/gemfiles/rails_edge.gemfile deleted file mode 100644 index fcaf72bc..00000000 --- a/gemfiles/rails_edge.gemfile +++ /dev/null @@ -1,8 +0,0 @@ -source "https://rubygems.org" - -gem "arel", github: "rails/arel" -gem "activerecord", github: "rails/rails" -gem "actionview", github: "rails/rails" -gem "activesupport", github: "rails/rails" - -gemspec :path => '../' diff --git a/lib/active_record/turntable/active_record_ext.rb b/lib/active_record/turntable/active_record_ext.rb index fe19f5ab..5fbc01c2 100644 --- a/lib/active_record/turntable/active_record_ext.rb +++ b/lib/active_record/turntable/active_record_ext.rb @@ -25,9 +25,7 @@ module ActiveRecordExt ActiveRecord::ConnectionAdapters::AbstractAdapter.prepend(AbstractAdapter) ActiveRecord::LogSubscriber.prepend(LogSubscriber) ActiveRecord::Persistence.include(Persistence) - ActiveRecord::Locking::Optimistic.include(LockingOptimistic) ActiveRecord::Relation.include(CleverLoad) - ActiveRecord::Relation.prepend(Relation) unless Util.ar_version_equals_or_later?("5.1.6") ActiveRecord::Migration.include(ActiveRecord::Turntable::Migration) ActiveRecord::ConnectionAdapters::ConnectionHandler.prepend(ConnectionHandlerExtension) ActiveRecord::Associations::Preloader::Association.prepend(AssociationPreloader) diff --git a/lib/active_record/turntable/active_record_ext/abstract_adapter.rb b/lib/active_record/turntable/active_record_ext/abstract_adapter.rb index 5e6380ec..634726e5 100644 --- a/lib/active_record/turntable/active_record_ext/abstract_adapter.rb +++ b/lib/active_record/turntable/active_record_ext/abstract_adapter.rb @@ -9,18 +9,11 @@ def self.prepended(klass) end def translate_exception_class(e, sql, binds) - begin - message = "#{e.class.name}: #{e.message}: #{sql} : #{turntable_shard_name}" - rescue Encoding::CompatibilityError - message = "#{e.class.name}: #{e.message.force_encoding sql.encoding}: #{sql} : #{turntable_shard_name}" - end + message = "#{e.class.name}: #{e.message} : #{turntable_shard_name}" - exception = - if Util.ar60_or_later? - translate_exception(e, message: message, sql: sql, binds: binds) - else - translate_exception(e, message) - end + exception = translate_exception( + e, message: message, sql: sql, binds: binds + ) exception.set_backtrace e.backtrace exception end @@ -28,6 +21,45 @@ def translate_exception_class(e, sql, binds) # @note override for append current shard name # rubocop:disable Style/HashSyntax, Style/MultilineMethodCallBraceLayout + + module V7_1 + def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false, &block) # :doc: + @instrumenter.instrument( + "sql.active_record", + sql: sql, + name: name, + binds: binds, + type_casted_binds: type_casted_binds, + statement_name: statement_name, + async: async, + connection: self, + turntable_shard_name: turntable_shard_name, + &block + ) + rescue ActiveRecord::StatementInvalid => ex + raise ex.set_query(sql, binds) + end + end + + module V7_0 + def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false, &block) # :doc: + @instrumenter.instrument( + "sql.active_record", + sql: sql, + name: name, + binds: binds, + type_casted_binds: type_casted_binds, + statement_name: statement_name, + async: async, + connection: self, + turntable_shard_name: turntable_shard_name) do + @lock.synchronize(&block) + rescue => e + raise translate_exception_class(e, sql, binds) + end + end + end + module V6_0 def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) @instrumenter.instrument( diff --git a/lib/active_record/turntable/active_record_ext/database_tasks.rb b/lib/active_record/turntable/active_record_ext/database_tasks.rb index fcb8ec3e..8a070fd2 100644 --- a/lib/active_record/turntable/active_record_ext/database_tasks.rb +++ b/lib/active_record/turntable/active_record_ext/database_tasks.rb @@ -40,12 +40,12 @@ def drop_current_turntable_cluster(environment = env) def each_current_turntable_cluster_connected(environment) old_connection_pool = ActiveRecord::Base.connection_pool each_current_turntable_cluster_configuration(environment) do |name, configuration| - ActiveRecord::Base.clear_active_connections! + ActiveRecord::Base.clear_active_connections!(:all) ActiveRecord::Base.establish_connection(configuration) ActiveRecord::Migration.current_shard = name yield(name, configuration) end - ActiveRecord::Base.clear_active_connections! + ActiveRecord::Base.clear_active_connections!(:all) config = if old_connection_pool.respond_to?(:db_config) old_connection_pool.db_config.configuration_hash else diff --git a/lib/active_record/turntable/active_record_ext/locking_optimistic.rb b/lib/active_record/turntable/active_record_ext/locking_optimistic.rb deleted file mode 100644 index 765190cb..00000000 --- a/lib/active_record/turntable/active_record_ext/locking_optimistic.rb +++ /dev/null @@ -1,196 +0,0 @@ -module ActiveRecord::Turntable - module ActiveRecordExt - module LockingOptimistic - if Util.ar_version_equals_or_later?("6.1.2") - ::ActiveRecord::Locking::Optimistic.class_eval <<-EOD - private - - def _update_row(attribute_names, attempted_action = "update") - return super unless locking_enabled? - - begin - locking_column = self.class.locking_column - lock_attribute_was = @attributes[locking_column] - lock_value_for_database = _lock_value_for_database(locking_column) - - attribute_names = attribute_names.dup if attribute_names.frozen? - attribute_names << locking_column - - self[locking_column] += 1 - - constraints = { - @primary_key => id_in_database, - locking_column => lock_value_for_database - } - if self.class.sharding_condition_needed? - constraints[self.class.turntable_shard_key] = self[self.class.turntable_shard_key] - end - - affected_rows = self.class._update_record( - attributes_with_values(attribute_names), - constraints - ) - - if affected_rows != 1 - raise ActiveRecord::StaleObjectError.new(self, attempted_action) - end - - affected_rows - - # If something went wrong, revert the locking_column value. - rescue Exception - @attributes[locking_column] = lock_attribute_was - raise - end - end - EOD - elsif Util.ar_version_equals_or_later?("5.1.6") - ::ActiveRecord::Locking::Optimistic.class_eval <<-EOD - private - - def _update_row(attribute_names, attempted_action = "update") - return super unless locking_enabled? - - begin - locking_column = self.class.locking_column - previous_lock_value = read_attribute_before_type_cast(locking_column) - attribute_names = attribute_names.dup if attribute_names.frozen? - attribute_names << locking_column - - self[locking_column] += 1 - - constraints = { - self.class.primary_key => id_in_database, - locking_column => previous_lock_value - } - if self.class.sharding_condition_needed? - constraints[self.class.turntable_shard_key] = self[self.class.turntable_shard_key] - end - - if Util.ar52_or_later? - affected_rows = self.class._update_record( - attributes_with_values(attribute_names), - constraints, - ) - else - affected_rows = self.class.unscoped._update_record( - arel_attributes_with_values(attribute_names), - constraints, - ) - end - - if affected_rows != 1 - raise ActiveRecord::StaleObjectError.new(self, attempted_action) - end - - affected_rows - - # If something went wrong, revert the locking_column value. - rescue Exception - self[locking_column] = previous_lock_value.to_i - raise - end - end - EOD - elsif Util.ar51? - ::ActiveRecord::Locking::Optimistic.class_eval <<-EOD - private - # @note Override to add sharding condition on optimistic locking - def _update_record(attribute_names = self.attribute_names) - return super unless locking_enabled? - return 0 if attribute_names.empty? - - begin - klass = self.class - - lock_col = self.class.locking_column - - previous_lock_value = read_attribute_before_type_cast(lock_col) - - increment_lock - - attribute_names.push(lock_col) - - relation = self.class.unscoped - - condition_scope = relation.where( - self.class.primary_key => id, - lock_col => previous_lock_value - ) - if klass.turntable_enabled? and klass.primary_key != klass.turntable_shard_key.to_s - condition_scope = condition_scope.where( - klass.turntable_shard_key => self.send(klass.turntable_shard_key) - ) - end - - affected_rows = condition_scope.update_all( - attributes_for_update(attribute_names).map do |name| - [name, _read_attribute(name)] - end.to_h - ) - - unless affected_rows == 1 - raise ActiveRecord::StaleObjectError.new(self, "update") - end - - affected_rows - - # If something went wrong, revert the locking_column value. - rescue Exception - send(lock_col + "=", previous_lock_value.to_i) - raise - end - end - EOD - elsif Util.earlier_than_ar51? - ::ActiveRecord::Locking::Optimistic.class_eval <<-EOD - private - # @note Override to add sharding condition on optimistic locking - def _update_record(attribute_names = self.attribute_names) #:nodoc: - return super unless locking_enabled? - return 0 if attribute_names.empty? - - klass = self.class - lock_col = self.class.locking_column - previous_lock_value = send(lock_col).to_i - increment_lock - - attribute_names += [lock_col] - attribute_names.uniq! - - begin - relation = self.class.unscoped - - condition_scope = relation.where( - self.class.primary_key => id, - lock_col => previous_lock_value, - ) - if klass.turntable_enabled? and klass.primary_key != klass.turntable_shard_key.to_s - condition_scope = condition_scope.where( - klass.turntable_shard_key => self.send(klass.turntable_shard_key) - ) - end - - affected_rows = condition_scope.update_all( - attributes_for_update(attribute_names).map do |name| - [name, _read_attribute(name)] - end.to_h - ) - - unless affected_rows == 1 - raise ActiveRecord::StaleObjectError.new(self, "update") - end - - affected_rows - - # If something went wrong, revert the version. - rescue Exception - send(lock_col + '=', previous_lock_value) - raise - end - end - EOD - end - end - end -end diff --git a/lib/active_record/turntable/active_record_ext/log_subscriber.rb b/lib/active_record/turntable/active_record_ext/log_subscriber.rb index 45822dba..34bcebb0 100644 --- a/lib/active_record/turntable/active_record_ext/log_subscriber.rb +++ b/lib/active_record/turntable/active_record_ext/log_subscriber.rb @@ -5,36 +5,52 @@ module ActiveRecordExt module LogSubscriber # @note prepend to add shard name logging def sql(event) - self.class.runtime += event.duration - return unless logger.debug? + unless Util.ar71_or_later? + self.class.runtime += event.duration + return unless logger.debug? + end payload = event.payload return if ActiveRecord::LogSubscriber::IGNORE_PAYLOAD_NAMES.include?(payload[:name]) - name = "#{payload[:name]} (#{event.duration.round(1)}ms)" + name = if payload[:async] + "ASYNC #{payload[:name]} (#{payload[:lock_wait].round(1)}ms) (db time #{event.duration.round(1)}ms)" + else + "#{payload[:name]} (#{event.duration.round(1)}ms)" + end name = "#{name} [Shard: #{payload[:turntable_shard_name]}]" if payload[:turntable_shard_name] name = "CACHE #{name}" if payload[:cached] sql = payload[:sql] binds = nil - unless (payload[:binds] || []).empty? - if Util.ar_version_equals_or_later?("5.0.3") - casted_params = if Util.ar_version_satisfy?(">= 5.1.5") || Util.ar_version_satisfy?([">= 5.0.7", "< 5.1"]) - type_casted_binds(payload[:type_casted_binds]) - else - type_casted_binds(payload[:binds], payload[:type_casted_binds]) - end - binds = " " + payload[:binds].zip(casted_params).map { |attr, value| - render_bind(attr, value) - }.inspect - else - binds = " " + payload[:binds].map { |attr| render_bind(attr) }.inspect + if payload[:binds]&.any? + casted_params = type_casted_binds(payload[:type_casted_binds]) + + binds = [] + payload[:binds].each_with_index do |attr, i| + attribute_name = if attr.respond_to?(:name) + attr.name + elsif attr.respond_to?(:[]) && attr[i].respond_to?(:name) + attr[i].name + else + nil + end + + filtered_params = filter(attribute_name, casted_params[i]) + + binds << render_bind(attr, filtered_params) end + binds = binds.inspect + binds.prepend(" ") end name = colorize_payload_name(name, payload[:name]) - sql = color(sql, sql_color(sql), true) if Util.ar60_or_later? && colorize_logging + if Util.ar71_or_later? + sql = color(sql, sql_color(sql), bold: true) if colorize_logging + else + sql = color(sql, sql_color(sql), true) if colorize_logging + end debug " #{name} #{sql}#{binds}" end diff --git a/lib/active_record/turntable/active_record_ext/persistence.rb b/lib/active_record/turntable/active_record_ext/persistence.rb index affece3a..51d068d8 100644 --- a/lib/active_record/turntable/active_record_ext/persistence.rb +++ b/lib/active_record/turntable/active_record_ext/persistence.rb @@ -2,203 +2,50 @@ module ActiveRecord::Turntable module ActiveRecordExt module Persistence extend ActiveSupport::Concern - extend Compatibility ::ActiveRecord::Persistence.class_eval do # @note Override to add sharding scope on reloading def reload(options = nil) self.class.connection.clear_query_cache - finder_scope = if turntable_enabled? && self.class.primary_key != self.class.turntable_shard_key.to_s - self.class.unscoped.where(self.class.turntable_shard_key => self.send(turntable_shard_key)) + fresh_object = if turntable_enabled? && self.class.primary_key != self.class.turntable_shard_key.to_s + if apply_scoping?(options) + _find_record_with_shard(options) + else + self.class.unscoped { _find_record_with_shard(options) } + end else - self.class.unscoped + if apply_scoping?(options) + _find_record(options) + else + self.class.unscoped { _find_record(options) } + end end - fresh_object = - if options && options[:lock] - finder_scope.lock(options[:lock]).find(id) - else - finder_scope.find(id) - end - - @attributes = fresh_object.instance_variable_get("@attributes") + @association_cache = fresh_object.instance_variable_get(:@association_cache) + @attributes = fresh_object.instance_variable_get(:@attributes) @new_record = false + @previously_new_record = false self end - unless Util.ar_version_equals_or_later?("5.1.6") - # @note Override to add sharding scope on `touch` - # rubocop:disable Style/UnlessElse - def touch(*names, time: nil) - unless persisted? - raise ActiveRecord::ActiveRecordError, <<-MSG.squish - cannot touch on a new or destroyed record object. Consider using - persisted?, new_record?, or destroyed? before touching - MSG - end - - time ||= current_time_from_proper_timezone - attributes = timestamp_attributes_for_update_in_model - attributes.concat(names) - - unless attributes.empty? - changes = {} - - attributes.each do |column| - column = column.to_s - changes[column] = write_attribute(column, time) - end - - clear_attribute_changes(changes.keys) unless Util.ar51_or_later? - primary_key = self.class.primary_key - scope = if turntable_enabled? && primary_key != self.class.turntable_shard_key.to_s - self.class.unscoped.where(self.class.turntable_shard_key => _read_attribute(turntable_shard_key)) - else - self.class.unscoped - end - scope = scope.where(primary_key => _read_attribute(primary_key)) - - if locking_enabled? - locking_column = self.class.locking_column - scope = scope.where(locking_column => _read_attribute(locking_column)) - changes[locking_column] = increment_lock - end - - clear_attribute_changes(changes.keys) if Util.ar51_or_later? - result = scope.update_all(changes) == 1 - - if !result && locking_enabled? - raise ActiveRecord::StaleObjectError.new(self, "touch") - end - - @_trigger_update_callback = result - result - else - true - end - end - # rubocop:enable Style/UnlessElse - end - - # @note Override to add sharding scope on `update_columns` - if Util.ar52_or_later? - def update_columns(attributes) - raise ActiveRecord::ActiveRecordError, "cannot update a new record" if new_record? - raise ActiveRecord::ActiveRecordError, "cannot update a destroyed record" if destroyed? - - attributes = attributes.transform_keys do |key| - name = key.to_s - self.class.attribute_aliases[name] || name - end - - attributes.each_key do |key| - verify_readonly_attribute(key) - end - - constraints = { self.class.primary_key => id_in_database } - if self.class.sharding_condition_needed? - constraints[self.class.turntable_shard_key] = self[self.class.turntable_shard_key] - end - - affected_rows = self.class._update_record( - attributes, - constraints, - ) - - attributes.each do |k, v| - write_attribute_without_type_cast(k, v) - end - - affected_rows == 1 - end - else - def update_columns(attributes) - raise ActiveRecord::ActiveRecordError, "cannot update a new record" if new_record? - raise ActiveRecord::ActiveRecordError, "cannot update a destroyed record" if destroyed? - - attributes.each_key do |key| - verify_readonly_attribute(key.to_s) - end - - update_scope = if turntable_enabled? && self.class.primary_key != self.class.turntable_shard_key.to_s - self.class.unscoped.where(self.class.turntable_shard_key => self.send(turntable_shard_key)) - else - self.class.unscoped - end - - updated_count = update_scope.where(self.class.primary_key => id).update_all(attributes) - - attributes.each do |k, v| - raw_write_attribute(k, v) - end - - updated_count == 1 + def _find_record_with_shard(options) + if options && options[:lock] + self.class.preload(strict_loaded_associations).where(self.class.turntable_shard_key => self.send(turntable_shard_key)).lock(options[:lock]).find(id) + else + self.class.preload(strict_loaded_associations).where(self.class.turntable_shard_key => self.send(turntable_shard_key)).find(id) end end private - if Util.ar_version_equals_or_later?("5.1.6") - def _update_row(attribute_names, attempted_action = "update") - constraints = { self.class.primary_key => id_in_database } - if self.class.sharding_condition_needed? - constraints[self.class.turntable_shard_key] = self[self.class.turntable_shard_key] - end + # @note Override to add sharding scope on `_query_constraints_hash` + def _query_constraints_hash + h = { @primary_key => id_in_database } + return h unless self.class.sharding_condition_needed? - attributes = Util.ar52_or_later? ? attributes_with_values(attribute_names) : arel_attributes_with_values(attribute_names) - - self.class.unscoped._update_record( - attributes, - constraints, - ) - end - end - - if Util.ar52_or_later? - def _delete_row - constraints = { self.class.primary_key => id_in_database } - if self.class.sharding_condition_needed? - constraints[self.class.turntable_shard_key] = self[self.class.turntable_shard_key] - end - - self.class._delete_record(constraints) - end - else - # @note Override to add sharding scope on destroying - def relation_for_destroy - klass = self.class - relation = klass.unscoped.where(klass.primary_key => id) - - if klass.turntable_enabled? && klass.primary_key != klass.turntable_shard_key.to_s - relation = relation.where(klass.turntable_shard_key => self[klass.turntable_shard_key]) - end - relation - end - end - - if Util.ar_version_earlier_than?("5.1.6") - # @note Override to add sharding scope on updating - def _update_record(attribute_names = self.attribute_names) - klass = self.class - attributes_values = arel_attributes_with_values_for_update(attribute_names) - if attributes_values.empty? - rows_affected = 0 - @_trigger_update_callback = true - else - scope = if klass.turntable_enabled? && (klass.primary_key != klass.turntable_shard_key.to_s) - klass.unscoped.where(klass.turntable_shard_key => self.send(turntable_shard_key)) - end - previous_id = Util.ar51_or_later? ? id_in_database : id_was - rows_affected = klass.unscoped._update_record attributes_values, id, previous_id, scope - @_trigger_update_callback = rows_affected > 0 - end - - yield(self) if block_given? - - rows_affected - end - end + h.merge(self.class.turntable_shard_key => self[self.class.turntable_shard_key]) + end end end end diff --git a/lib/active_record/turntable/active_record_ext/relation.rb b/lib/active_record/turntable/active_record_ext/relation.rb deleted file mode 100644 index 74cb1a12..00000000 --- a/lib/active_record/turntable/active_record_ext/relation.rb +++ /dev/null @@ -1,29 +0,0 @@ -module ActiveRecord::Turntable - module ActiveRecordExt - module Relation - # @note Override to add sharding scope on updating - def _update_record(values, id, id_was, turntable_scope = nil) # :nodoc: - substitutes, binds = substitute_values values - - scope = @klass.unscoped - - if @klass.finder_needs_type_condition? - scope.unscope!(where: @klass.inheritance_column) - end - - relation = scope.where(@klass.primary_key => (id_was || id)) - relation = relation.merge(turntable_scope) if turntable_scope - bvs = binds + relation.bound_attributes - um = relation. - arel. - compile_update(substitutes, @klass.primary_key) - - @klass.connection.update( - um, - "SQL", - bvs - ) - end - end - end -end diff --git a/lib/active_record/turntable/active_record_ext/transactions.rb b/lib/active_record/turntable/active_record_ext/transactions.rb index 37deed79..efdf2208 100644 --- a/lib/active_record/turntable/active_record_ext/transactions.rb +++ b/lib/active_record/turntable/active_record_ext/transactions.rb @@ -8,8 +8,9 @@ def with_transaction_returning_status ensure_finalize = !klass.connection.transaction_open? if Util.ar61_or_later? status = nil - if self.new_record? && self.turntable_shard_key.to_s == klass.primary_key && - self.id.nil? && klass.prefetch_primary_key? + # trilogy が auto increment ベースで INSERT 後の ID を取得しようとするため + # new_record の場合は、常に ID へ sequencer の値をセットする + if self.new_record? && self.id.nil? && klass.prefetch_primary_key? self.id = klass.next_sequence_value end self.class.connection.shards_transaction([self.turntable_shard]) do diff --git a/lib/active_record/turntable/configuration_methods.rb b/lib/active_record/turntable/configuration_methods.rb index 521be94c..c86c1589 100644 --- a/lib/active_record/turntable/configuration_methods.rb +++ b/lib/active_record/turntable/configuration_methods.rb @@ -8,22 +8,13 @@ module ConfigurationMethods def turntable_configuration_file @turntable_configuration_file ||= File.join(turntable_app_root_path, "config/turntable.yml") end - alias_method :turntable_config_file, :turntable_configuration_file - deprecate turntable_config_file: "use turntable_configuration_file instead", deprecator: ActiveRecord::Turntable::Deprecation.instance def turntable_configuration_file=(filename) @turntable_configuration_file = filename end - alias_method :turntable_config_file=, :turntable_configuration_file= - deprecate "turntable_config_file=": "use turntable_configuration_file= instead", deprecator: ActiveRecord::Turntable::Deprecation.instance def turntable_app_root_path defined?(ActiveRecord::Turntable::RackupFramework) ? ActiveRecord::Turntable::RackupFramework.root.to_s : DEFAULT_PATH end - - def turntable_config - turntable_configuration - end - deprecate turntable_config: "use turntable_configuration instead", deprecator: ActiveRecord::Turntable::Deprecation.instance end end diff --git a/lib/active_record/turntable/connection_proxy.rb b/lib/active_record/turntable/connection_proxy.rb index d77360c4..0e04c384 100644 --- a/lib/active_record/turntable/connection_proxy.rb +++ b/lib/active_record/turntable/connection_proxy.rb @@ -86,14 +86,12 @@ def clear_query_cache end # rubocop:disable Style/MethodMissing - def method_missing(method, *args, &block) + def method_missing(method, *args, **kwargs, &block) clear_query_cache_if_needed(method) - args = args.dup - last_arg = args.last.is_a?(Hash) ? args.pop : {} if shard_fixed? - connection.send(method, *args, **last_arg, &block) + connection.send(method, *args, **kwargs, &block) elsif mixable?(method, *args) - fader = @mixer.build_fader(method, *args, **last_arg, &block) + fader = @mixer.build_fader(method, *args, **kwargs, &block) logger.debug { "[ActiveRecord::Turntable] Sending method: #{method}, " \ "sql: #{args.first}, " \ @@ -101,7 +99,7 @@ def method_missing(method, *args, &block) } fader.execute else - connection.send(method, *args, **last_arg, &block) + connection.send(method, *args, **kwargs, &block) end end # rubocop:enable Style/MethodMissing diff --git a/lib/active_record/turntable/migration.rb b/lib/active_record/turntable/migration.rb index 4526a4a1..ff91fed8 100644 --- a/lib/active_record/turntable/migration.rb +++ b/lib/active_record/turntable/migration.rb @@ -65,13 +65,13 @@ def migrate(*args) # SHOW FULL FIELDS FROM `users` を実行してテーブルの情報を取得するためにデフォルトのデータベースも追加する {"master": config}.merge(shard_conf).merge(seqs_conf).each do |connection_name, database_config| next if database_config["database"].blank? - ActiveRecord::Base.clear_active_connections! + ActiveRecord::Base.connection_handler.clear_active_connections!(:all) ActiveRecord::Base.establish_connection(database_config) current_shard_name = connection_name == :master ? nil : connection_name self.current_shard = current_shard_name super(*args) end - ActiveRecord::Base.clear_active_connections! + ActiveRecord::Base.connection_handler.clear_active_connections!(:all) ActiveRecord::Base.establish_connection config self.current_shard = nil end diff --git a/lib/active_record/turntable/mixer.rb b/lib/active_record/turntable/mixer.rb index 56ce63ef..c45c83aa 100644 --- a/lib/active_record/turntable/mixer.rb +++ b/lib/active_record/turntable/mixer.rb @@ -18,12 +18,12 @@ def initialize(proxy) @proxy = proxy end - def build_fader(method_name, query, *args, &block) + def build_fader(method_name, query, *args, **kwargs, &block) method = method_name.to_s if @proxy.shard_fixed? return SpecifiedShard.new(@proxy, { @proxy.fixed_shard => query }, - method, query, *args, &block) + method, query, *args, **kwargs, &block) end binds = (method == "insert") ? args[4] : args[1] binded_query = bind_sql(query, binds) @@ -45,19 +45,19 @@ def build_fader(method_name, query, *args, &block) # send to default shard return Fader::SpecifiedShard.new(@proxy, { @proxy.default_shard => query }, - method, query, *args, &block) + method, query, *args, **kwargs, &block) end - build_select_fader(tree, method, query, *args, &block) + build_select_fader(tree, method, query, *args, **kwargs, &block) when SQLTree::Node::UpdateQuery, SQLTree::Node::DeleteQuery - build_update_fader(tree, method, query, *args, &block) + build_update_fader(tree, method, query, *args, **kwargs, &block) when SQLTree::Node::InsertQuery - build_insert_fader(tree, method, query, *args, &block) + build_insert_fader(tree, method, query, *args, **kwargs, &block) else # send to default shard Fader::SpecifiedShard.new(@proxy, { @proxy.default_shard => query }, - method, query, *args, &block) + method, query, *args, **kwargs, &block) end rescue Exception => err logger.warn { "[ActiveRecord::Turntable] Error on Building Fader: #{binded_query}, on_method: #{method_name}, err: #{err}" } @@ -136,7 +136,7 @@ def bind_sql(sql, binds) end end - def build_select_fader(tree, method, query, *args, &block) + def build_select_fader(tree, method, query, *args, **kwargs, &block) shard_keys = if !tree.where && tree.from.size == 1 && SQLTree::Node::SubQuery === tree.from.first.table_reference.table find_shard_keys(tree.from.first.table_reference.table.where, @proxy.klass.table_name, @@ -151,12 +151,12 @@ def build_select_fader(tree, method, query, *args, &block) if shard_keys.size == 1 # shard return Fader::SpecifiedShard.new(@proxy, { @proxy.cluster.shard_for(shard_keys.first) => query }, - method, query, *args, &block) + method, query, *args, **kwargs, &block) elsif SQLTree::Node::SelectDeclaration === tree.select.first && tree.select.first.to_sql == '1 AS "one"' # for `SELECT 1 AS one` (AR::Base.exists?) return Fader::SelectShardsMergeResult.new(@proxy, build_shards_with_same_query(@proxy.shards, query), - method, query, *args, &block) + method, query, *args, **kwargs, &block) elsif @proxy.current_shard.blank? and (tree.group_by or tree.order_by or tree.limit.try(:value).to_i > 0) raise CannotSpecifyShardError, "cannot specify shard for query: #{tree.to_sql}" elsif shard_keys.present? @@ -164,11 +164,11 @@ def build_select_fader(tree, method, query, *args, &block) SQLTree::Node::CountAggregrate === tree.select.first.expression return Fader::CalculateShardsSumResult.new(@proxy, build_shards_with_same_query(@proxy.shards, query), - method, query, *args, &block) + method, query, *args, **kwargs, &block) else return Fader::SelectShardsMergeResult.new(@proxy, Hash[shard_keys.map { |k| [@proxy.cluster.shard_for(k), query] }], - method, query, *args, &block) + method, query, *args, **kwargs, &block) end else # scan all shards if SQLTree::Node::SelectDeclaration === tree.select.first && @@ -179,7 +179,7 @@ def build_select_fader(tree, method, query, *args, &block) end return Fader::CalculateShardsSumResult.new(@proxy, build_shards_with_same_query(@proxy.shards, query), - method, query, *args, &block) + method, query, *args, **kwargs, &block) elsif SQLTree::Node::AllFieldsDeclaration === tree.select.first || SQLTree::Node::Expression::Value === tree.select.first.expression || SQLTree::Node::Expression::Variable === tree.select.first.expression @@ -189,14 +189,14 @@ def build_select_fader(tree, method, query, *args, &block) end return Fader::SelectShardsMergeResult.new(@proxy, build_shards_with_same_query(@proxy.shards, query), - method, query, *args, &block) + method, query, *args, **kwargs, &block) else raise CannotSpecifyShardError, "cannot specify shard for query: #{tree.to_sql}" end end end - def build_update_fader(tree, method, query, *args, &block) + def build_update_fader(tree, method, query, *args, **kwargs, &block) shard_keys = find_shard_keys(tree.where, @proxy.klass.table_name, @proxy.klass.turntable_shard_key.to_s) shards_with_query = if shard_keys.present? build_shards_with_same_query(shard_keys.map { |k| @proxy.cluster.shard_for(k) }, query) @@ -207,18 +207,18 @@ def build_update_fader(tree, method, query, *args, &block) if shards_with_query.size == 1 Fader::SpecifiedShard.new(@proxy, shards_with_query, - method, query, *args, &block) + method, query, *args, **kwargs, &block) else if raise_on_not_specified_shard_update? raise CannotSpecifyShardError, "[Performance Notice] PLEASE FIX: #{tree.to_sql}" end Fader::UpdateShardsMergeResult.new(@proxy, shards_with_query, - method, query, *args, &block) + method, query, *args, **kwargs, &block) end end - def build_insert_fader(tree, method, query, *args, &block) + def build_insert_fader(tree, method, query, *args, **kwargs, &block) values_hash = divide_insert_values(tree, @proxy.klass.turntable_shard_key) shards_with_query = {} values_hash.each do |k, vs| @@ -230,7 +230,7 @@ def build_insert_fader(tree, method, query, *args, &block) sql.gsub!('("\0")') { value_sql } shards_with_query[@proxy.cluster.shard_for(k)] = sql end - Fader::InsertShardsMergeResult.new(@proxy, shards_with_query, method, query, *args, &block) + Fader::InsertShardsMergeResult.new(@proxy, shards_with_query, method, query, *args, **kwargs, &block) end def raise_on_not_specified_shard_query? diff --git a/lib/active_record/turntable/mixer/fader.rb b/lib/active_record/turntable/mixer/fader.rb index f3c41733..d808a7c4 100644 --- a/lib/active_record/turntable/mixer/fader.rb +++ b/lib/active_record/turntable/mixer/fader.rb @@ -19,12 +19,13 @@ class Fader attr_reader :called_method attr_reader :query - def initialize(proxy, shards_query_hash, called_method, query, *args, &block) + def initialize(proxy, shards_query_hash, called_method, query, *args, **kwargs, &block) @proxy = proxy @shards_query_hash = shards_query_hash @called_method = called_method @query = query @args = args + @kwargs = kwargs @block = block end diff --git a/lib/active_record/turntable/mixer/fader/calculate_shards_sum_result.rb b/lib/active_record/turntable/mixer/fader/calculate_shards_sum_result.rb index f83842ca..fe060218 100644 --- a/lib/active_record/turntable/mixer/fader/calculate_shards_sum_result.rb +++ b/lib/active_record/turntable/mixer/fader/calculate_shards_sum_result.rb @@ -6,7 +6,7 @@ def execute results = @shards_query_hash.map do |shard, query| args = @args.dup args[1] = args[1].dup if args[1].present? - shard.connection.send(@called_method, query, *@args, &@block) + shard.connection.send(@called_method, query, *@args, **@kwargs, &@block) end merge_results(results) end diff --git a/lib/active_record/turntable/mixer/fader/insert_shards_merge_result.rb b/lib/active_record/turntable/mixer/fader/insert_shards_merge_result.rb index df527cab..142f9da6 100644 --- a/lib/active_record/turntable/mixer/fader/insert_shards_merge_result.rb +++ b/lib/active_record/turntable/mixer/fader/insert_shards_merge_result.rb @@ -6,14 +6,14 @@ def execute if @shards_query_hash.size == 1 @proxy.shards_transaction(@shards_query_hash.keys) do shard, query = @shards_query_hash.first - shard.connection.send(@called_method, query, *@args, &@block) + shard.connection.send(@called_method, query, *@args, **@kwargs, &@block) end else @proxy.shards_transaction(@shards_query_hash.keys) do @shards_query_hash.each do |shard, query| args = @args.dup args[4] = args[4].dup if args[4].present? - shard.connection.send(@called_method, query, *args, &@block) + shard.connection.send(@called_method, query, *args, **@kwargs, &@block) end end end diff --git a/lib/active_record/turntable/mixer/fader/select_shards_merge_result.rb b/lib/active_record/turntable/mixer/fader/select_shards_merge_result.rb index 3a086960..4cd31b95 100644 --- a/lib/active_record/turntable/mixer/fader/select_shards_merge_result.rb +++ b/lib/active_record/turntable/mixer/fader/select_shards_merge_result.rb @@ -6,8 +6,7 @@ def execute results = @shards_query_hash.map do |shard, query| args = @args.dup args[1] = args[1].dup if args[1].present? - last_arg = args.last.is_a?(Hash) ? args.pop : {} - shard.connection.send(@called_method, query, *args, **last_arg, &@block) + shard.connection.send(@called_method, query, *args, **@kwargs, &@block) end merge_results(results) end diff --git a/lib/active_record/turntable/mixer/fader/specified_shard.rb b/lib/active_record/turntable/mixer/fader/specified_shard.rb index ba8ec4f5..5cf5353b 100644 --- a/lib/active_record/turntable/mixer/fader/specified_shard.rb +++ b/lib/active_record/turntable/mixer/fader/specified_shard.rb @@ -5,9 +5,7 @@ class SpecifiedShard < Fader def execute shard, query = @shards_query_hash.first @proxy.with_shard(shard) do - args = @args.dup - last_arg = @args.last.is_a?(Hash) ? args.pop : {} - shard.connection.send(@called_method, query, *args, **last_arg, &@block) + shard.connection.send(@called_method, query, *@args, **@kwargs, &@block) end end end diff --git a/lib/active_record/turntable/mixer/fader/update_shards_merge_result.rb b/lib/active_record/turntable/mixer/fader/update_shards_merge_result.rb index 94a57eb5..f87f5013 100644 --- a/lib/active_record/turntable/mixer/fader/update_shards_merge_result.rb +++ b/lib/active_record/turntable/mixer/fader/update_shards_merge_result.rb @@ -7,7 +7,7 @@ def execute @shards_query_hash.map do |shard, query| args = @args.dup args[1] = args[1].dup if args[1].present? - shard.connection.send(@called_method, query, *@args, &@block) + shard.connection.send(@called_method, query, *@args, **@kwargs, &@block) end.inject(&:+) end end diff --git a/lib/active_record/turntable/pool_proxy.rb b/lib/active_record/turntable/pool_proxy.rb index f4e705fc..da7a5588 100644 --- a/lib/active_record/turntable/pool_proxy.rb +++ b/lib/active_record/turntable/pool_proxy.rb @@ -60,6 +60,10 @@ def discard! # Nothing to do end + def connection_class + @proxy.klass + end + private def connection_pools_list diff --git a/lib/active_record/turntable/sequencer/mysql.rb b/lib/active_record/turntable/sequencer/mysql.rb index 9d9a9d7b..f8b0e53c 100644 --- a/lib/active_record/turntable/sequencer/mysql.rb +++ b/lib/active_record/turntable/sequencer/mysql.rb @@ -39,7 +39,7 @@ def current_sequence_value(sequence_name) def last_insert_id(conn) res = conn.execute("SELECT LAST_INSERT_ID()") - if conn.adapter_name == "Trilogy" + if conn.adapter_name == "Trilogy" && !Util.ar71_or_later? res.first.first.last.to_i else res.first.first.to_i diff --git a/lib/active_record/turntable/slave_registry.rb b/lib/active_record/turntable/slave_registry.rb index 4bcf2036..56d1a484 100644 --- a/lib/active_record/turntable/slave_registry.rb +++ b/lib/active_record/turntable/slave_registry.rb @@ -1,21 +1,20 @@ module ActiveRecord::Turntable class SlaveRegistry - extend ActiveSupport::PerThreadRegistry + thread_mattr_accessor :registry - def initialize - @registry = Hash.new { |h, k| h[k] = {} } + def self.slave_for(shard) + SlaveRegistry.registry ||= Hash.new { |h, k| h[k] = {} } + SlaveRegistry.registry[shard][:current_slave] end - def slave_for(shard) - @registry[shard][:current_slave] + def self.set_slave_for(shard, target_slave) + SlaveRegistry.registry ||= Hash.new { |h, k| h[k] = {} } + SlaveRegistry.registry[shard][:current_slave] = target_slave end - def set_slave_for(shard, target_slave) - @registry[shard][:current_slave] = target_slave - end - - def clear_for!(shard) - @registry[shard].clear + def self.clear_for!(shard) + SlaveRegistry.registry ||= Hash.new { |h, k| h[k] = {} } + SlaveRegistry.registry[shard].clear end end end diff --git a/lib/active_record/turntable/util.rb b/lib/active_record/turntable/util.rb index 5310b61e..75e50e95 100644 --- a/lib/active_record/turntable/util.rb +++ b/lib/active_record/turntable/util.rb @@ -43,6 +43,10 @@ def ar61_or_later? ar_version_equals_or_later?("6.1") end + def ar71_or_later? + ar_version_equals_or_later?("7.1") + end + module_function :ar_version_equals_or_later?, :ar_version_earlier_than?, :ar_version, @@ -52,6 +56,7 @@ def ar61_or_later? :ar51_or_later?, :ar52_or_later?, :ar60_or_later?, - :ar61_or_later? + :ar61_or_later?, + :ar71_or_later? end end diff --git a/spec/active_record/turntable/active_record_ext/locking_optimistic_spec.rb b/spec/active_record/turntable/active_record_ext/locking_optimistic_spec.rb deleted file mode 100644 index 791fc766..00000000 --- a/spec/active_record/turntable/active_record_ext/locking_optimistic_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require "spec_helper" - -describe ActiveRecord::Turntable::ActiveRecordExt::LockingOptimistic do - around do |example| - ActiveRecord::Base.turntable_configuration.raise_on_not_specified_shard_update = true - example.run - ActiveRecord::Base.turntable_configuration.raise_on_not_specified_shard_update = false - end - - let(:user) { create(:user) } - let(:user_profile) { user.user_profile } - - describe "optimistic locking" do - if ActiveRecord::Turntable::Util.ar60_or_later? - subject { user_profile.update(birthday: Date.current) } - else - subject { user_profile.update_attributes(birthday: Date.current) } - end - - it { expect { subject }.to change(user_profile, :lock_version).by(1) } - end - - describe "Json serialized column is saved" do - before do - if ActiveRecord::Turntable::Util.ar60_or_later? - user_profile.update(data: { foo: "bar" }) - else - user_profile.update_attributes(data: { foo: "bar" }) - end - user_profile.reload - end - - subject { user_profile.data } - - it { expect { subject }.not_to raise_error } - end -end diff --git a/spec/active_record/turntable/active_record_ext/log_subscriber_spec.rb b/spec/active_record/turntable/active_record_ext/log_subscriber_spec.rb index 3fdfd93f..8a0a2537 100644 --- a/spec/active_record/turntable/active_record_ext/log_subscriber_spec.rb +++ b/spec/active_record/turntable/active_record_ext/log_subscriber_spec.rb @@ -3,7 +3,11 @@ describe ActiveRecord::Turntable::ActiveRecordExt::LogSubscriber do REGEXP_MAGENTA = Regexp.escape(ActiveRecord::LogSubscriber::MAGENTA) REGEXP_CYAN = Regexp.escape(ActiveRecord::LogSubscriber::CYAN) - REGEXP_CLEAR = Regexp.escape(ActiveRecord::LogSubscriber::CLEAR) + if ActiveRecord::Turntable::Util.ar71_or_later? + REGEXP_CLEAR = Regexp.escape("\e[#{ActiveRecord::LogSubscriber::MODES[:clear]}m") + else + REGEXP_CLEAR = Regexp.escape(ActiveRecord::LogSubscriber::CLEAR) + end class TestLogSubscriber < ActiveRecord::LogSubscriber attr_reader :debugs diff --git a/spec/active_record/turntable/active_record_ext/query_cache_spec.rb b/spec/active_record/turntable/active_record_ext/query_cache_spec.rb index 399ef704..370d907c 100644 --- a/spec/active_record/turntable/active_record_ext/query_cache_spec.rb +++ b/spec/active_record/turntable/active_record_ext/query_cache_spec.rb @@ -5,21 +5,7 @@ def middleware(&app) executor = Class.new(ActiveSupport::Executor) ActiveRecord::QueryCache.install_executor_hooks executor - lambda do |env| - begin - if ActiveRecord::Turntable::Util.ar60_or_later? - original_handlers = ActiveRecord::Base.connection_handlers - ActiveRecord::Base.connection_handlers = { writing: ActiveRecord::Base.default_connection_handler, reading: ActiveRecord::ConnectionAdapters::ConnectionHandler.new } - end - executor.wrap do - app.call(env) - end - ensure - if ActiveRecord::Turntable::Util.ar60_or_later? - ActiveRecord::Base.connection_handlers = original_handlers - end - end - end + lambda { |env| executor.wrap { app.call(env) } } end def disable_query_cache diff --git a/spec/active_record/turntable/active_record_ext/test_fixtures_spec.rb b/spec/active_record/turntable/active_record_ext/test_fixtures_spec.rb index 15c5316b..aa3953ef 100644 --- a/spec/active_record/turntable/active_record_ext/test_fixtures_spec.rb +++ b/spec/active_record/turntable/active_record_ext/test_fixtures_spec.rb @@ -5,7 +5,11 @@ describe ActiveRecord::TestFixtures do before do - test_fixture_class.fixture_path = fixtures_root + if ActiveRecord::Turntable::Util.ar71_or_later? + test_fixture_class.fixture_paths = [fixtures_root] + else + test_fixture_class.fixture_path = fixtures_root + end end let(:fixtures_root) { File.join(File.dirname(__FILE__), "../../../fixtures") } diff --git a/spec/active_record/turntable/base_spec.rb b/spec/active_record/turntable/base_spec.rb index 118a209c..6d15155d 100644 --- a/spec/active_record/turntable/base_spec.rb +++ b/spec/active_record/turntable/base_spec.rb @@ -28,7 +28,7 @@ ActiveRecord::Base.force_connect_all_shards! end - subject { ActiveRecord::Base.clear_all_connections! } + subject { ActiveRecord::Base.connection_handler.clear_all_connections! } it "closes all connections" do expect { subject }.to change { @@ -45,7 +45,7 @@ before do # release all connection on parent process - ActiveRecord::Base.clear_all_connections! + ActiveRecord::Base.connection_handler.clear_all_connections! end it "closes all connections" do @@ -53,7 +53,7 @@ pid = fork { User.user_cluster_transaction {} - ActiveRecord::Base.clear_all_connections! + ActiveRecord::Base.connection_handler.clear_all_connections! connected_count = ObjectSpace.each_object(ActiveRecord::ConnectionAdapters::ConnectionPool).count { |pool| pool.connections && pool.connected? } wr.write connected_count diff --git a/spec/active_record/turntable/pool_proxy_spec.rb b/spec/active_record/turntable/pool_proxy_spec.rb index d3034f2c..ff47c051 100644 --- a/spec/active_record/turntable/pool_proxy_spec.rb +++ b/spec/active_record/turntable/pool_proxy_spec.rb @@ -4,9 +4,12 @@ context "When initialized" do subject { ActiveRecord::Turntable::PoolProxy.new(nil) } - # TODO: should support AR 6.1 methods (connection_klass discarded? pool_config db_config) - UNSUPPORTED_PROXY_METHODS = %i[checkout checkin stat lock_thread= remove num_waiting_in_queue owner_name connection_klass discarded? pool_config db_config].freeze - + UNSUPPORTED_PROXY_METHODS = %i[ + checkout checkin stat lock_thread= remove num_waiting_in_queue owner_name + connection_klass discarded? pool_config db_config + async_executor role shard schedule_query + schema_reflection schema_reflection= + ].freeze context "Comparing original connection pool" do (ActiveRecord::ConnectionAdapters::ConnectionPool.instance_methods(false) - UNSUPPORTED_PROXY_METHODS).each do |original_method| it { is_expected.to be_respond_to(original_method) } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 8c0c4e63..b0245169 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,7 +12,7 @@ require "active_record/turntable/active_record_ext/fixtures" ActiveSupport.on_load(:active_record) do - if ENV["DATABASE_ADAPTER"] == "trilogy" + if ENV["DATABASE_ADAPTER"] == "trilogy" && !ActiveRecord::Turntable::Util.ar71_or_later? require "trilogy_adapter/connection" ActiveRecord::Base.public_send :extend, TrilogyAdapter::Connection end @@ -44,6 +44,7 @@ # in ./support/ and its subdirectories. database_yaml = File.read(File.join(File.dirname(__FILE__), "config/database.yml")) database_yaml = ERB.new(database_yaml).result +ActiveRecord.legacy_connection_handling = false unless ActiveRecord::Turntable::Util.ar71_or_later? ActiveRecord::Base.configurations = YAML.safe_load(database_yaml, permitted_classes: [Symbol], aliases: true) ActiveRecord::Base.establish_connection(:test)