From bc1d0478f922ec78f28d32d8a40b9f8955823c7b Mon Sep 17 00:00:00 2001 From: DmitryTsepelev Date: Fri, 10 Jun 2022 18:59:46 +0300 Subject: [PATCH] Rails 7 support --- .github/workflows/rspec.yml | 21 ++++++++++++------- CHANGELOG.md | 1 + gemfiles/rails_5_2.gemfile | 6 ------ gemfiles/rails_7_0.gemfile | 6 ++++++ .../ext/active_model/attributes.rb | 14 ++++++++++--- .../merge_error_strategy_spec.rb | 7 +++++++ 6 files changed, 38 insertions(+), 17 deletions(-) delete mode 100644 gemfiles/rails_5_2.gemfile create mode 100644 gemfiles/rails_7_0.gemfile diff --git a/.github/workflows/rspec.yml b/.github/workflows/rspec.yml index d3ea6db..b2973c6 100644 --- a/.github/workflows/rspec.yml +++ b/.github/workflows/rspec.yml @@ -20,37 +20,42 @@ jobs: strategy: fail-fast: false matrix: - ruby: [jruby, 2.6, 2.7] + ruby: [jruby, 2.6, 2.7, 3.0, 3.1] gemfile: [ "gemfiles/jruby.gemfile", - "gemfiles/rails_5_2.gemfile", "gemfiles/rails_6_0.gemfile", - "gemfiles/rails_6_2.gemfile" + "gemfiles/rails_6_2.gemfile", + "gemfiles/rails_7_0.gemfile" ] allow_failures: - false exclude: - - ruby: jruby - gemfile: gemfiles/rails_5_2.gemfile - ruby: jruby gemfile: gemfiles/rails_6_0.gemfile - ruby: jruby gemfile: gemfiles/rails_6_2.gemfile + - ruby: jruby + gemfile: gemfiles/rails_7_0.gemfile - ruby: jruby gemfile: gemfiles/railsmaster.gemfile - - ruby: 2.5 - gemfile: gemfiles/jruby.gemfile - ruby: 2.6 gemfile: gemfiles/jruby.gemfile - ruby: 2.7 gemfile: gemfiles/jruby.gemfile - - ruby: ruby-head + - ruby: 3.0 + gemfile: gemfiles/jruby.gemfile + - ruby: 3.1 gemfile: gemfiles/jruby.gemfile + - ruby: 2.6 + gemfile: gemfiles/rails_7_0.gemfile + - ruby: 2.6 + gemfile: gemfiles/railsmaster.gemfile + include: - ruby: ruby-head gemfile: gemfiles/railsmaster.gemfile diff --git a/CHANGELOG.md b/CHANGELOG.md index e3b633c..593b6c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## master +- [PR #117](https://github.com/DmitryTsepelev/store_model/pull/117) Rails 7 support ([@DmitryTsepelev]) - [PR #112](https://github.com/DmitryTsepelev/store_model/pull/111) Fix validation for cast attributes ([@zk475811]) ## 0.13.0 (2022-02-11) diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile deleted file mode 100644 index fb8292a..0000000 --- a/gemfiles/rails_5_2.gemfile +++ /dev/null @@ -1,6 +0,0 @@ -source "https://rubygems.org" - -gem "sqlite3", "~> 1.3.6" -gem "activerecord", "~> 5.2.0" - -gemspec path: "../" diff --git a/gemfiles/rails_7_0.gemfile b/gemfiles/rails_7_0.gemfile new file mode 100644 index 0000000..c687c59 --- /dev/null +++ b/gemfiles/rails_7_0.gemfile @@ -0,0 +1,6 @@ +source "https://rubygems.org" + +gem "sqlite3", "~> 1.4.0" +gem "activerecord", "~> 7.0.3" + +gemspec path: "../" diff --git a/lib/store_model/ext/active_model/attributes.rb b/lib/store_model/ext/active_model/attributes.rb index eef5df9..6077bc3 100644 --- a/lib/store_model/ext/active_model/attributes.rb +++ b/lib/store_model/ext/active_model/attributes.rb @@ -15,9 +15,17 @@ def attribute(*) end end - def write_attribute(*) - super.tap do |value| - assign_parent_to_store_model_relation(value) + if Rails::VERSION::MAJOR >= 7 + def _write_attribute(*) + super.tap do |value| + assign_parent_to_store_model_relation(value) + end + end + else + def write_attribute(*) + super.tap do |value| + assign_parent_to_store_model_relation(value) + end end end end diff --git a/spec/store_model/combine_error_strategies/merge_error_strategy_spec.rb b/spec/store_model/combine_error_strategies/merge_error_strategy_spec.rb index 0aba30a..8f05b22 100644 --- a/spec/store_model/combine_error_strategies/merge_error_strategy_spec.rb +++ b/spec/store_model/combine_error_strategies/merge_error_strategy_spec.rb @@ -52,6 +52,13 @@ if Rails::VERSION::MAJOR < 6 || Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR.zero? expect(record.errors.messages).to eq(name: ["can't be blank"], color: ["can't be blank"]) expect(record.errors.full_messages).to eq(["Name can't be blank", "Color can't be blank"]) + elsif Rails::VERSION::MAJOR == 7 + expect(record.errors.messages).to eq( + name: ["can't be blank"], configuration: ["is invalid", "Color can't be blank"] + ) + expect(record.errors.full_messages).to eq( + ["Name can't be blank", "Configuration is invalid", "Configuration Color can't be blank"] + ) else expect(record.errors.messages).to eq( name: ["can't be blank"], configuration: ["Color can't be blank"]