diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5a589bd8..acd6d9bbe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,26 +13,36 @@ jobs: matrix: include: # Recent Rubies and Rails - - ruby-version: '3.3' + - ruby-version: '3.4' + rails-version: '8.1' + - ruby-version: '3.4' rails-version: '8.0' - - ruby-version: '3.2' + - ruby-version: '3.4' + rails-version: '7.2' + - ruby-version: '3.3' rails-version: '8.0' + - ruby-version: '3.3' + rails-version: '7.2' + - ruby-version: '3.3' + rails-version: '7.1' - ruby-version: '3.2' rails-version: '7.2' - ruby-version: '3.2' rails-version: '7.1' + - ruby-version: '3.2' + rails-version: '7.0' - ruby-version: '3.1' rails-version: '7.1' - ruby-version: '3.0' - rails-version: '7.1' + rails-version: '7.0' - ruby-version: '2.7' - rails-version: '7.1' + rails-version: '6.1' + - ruby-version: '2.7' + rails-version: '6.0' - ruby-version: '2.6' rails-version: '6.1' - ruby-version: '2.6' rails-version: '6.0' - - ruby-version: '2.7' - rails-version: '6.0' - ruby-version: '2.6' rails-version: '5.2' # Old Rubies and Rails diff --git a/Gemfile b/Gemfile index a9c26e9b6..83693517b 100644 --- a/Gemfile +++ b/Gemfile @@ -82,6 +82,7 @@ group :test do end end gem 'codeclimate-test-reporter', require: false + gem 'json', '< 2.10', require: false gem 'm', '~> 1.5' gem 'pry', '>= 0.10' gem 'byebug', '~> 8.2' if RUBY_VERSION < '2.2' @@ -96,6 +97,11 @@ group :development, :test do gem 'rubocop-minitest', '~> 0.31.0', require: false gem 'rubocop-rails', '~> 2.20.0', require: false gem 'rubocop-rake', '~> 0.6.0', require: false + + if RUBY_VERSION >= '3.4.0' + gem 'ostruct', require: false + gem 'mutex_m', require: false + end end if version <= '5.0' gem 'loofah', '< 2.21.0' diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 5e3477905..118098f93 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -13,6 +13,9 @@ # reified when subclassed to decorate a resource. module ActiveModel class Serializer + class_attribute :config + self.config = ActiveSupport::OrderedOptions.new + undef_method :select, :display # These IO methods, which are mixed into Kernel, # sometimes conflict with attribute names. We don't need these IO methods. @@ -30,7 +33,6 @@ class Serializer autoload :HasOneReflection autoload :HasManyReflection end - include ActiveSupport::Configurable include Caching # @param resource [ActiveRecord::Base, ActiveModelSerializers::Model] diff --git a/test/serializers/reflection_test.rb b/test/serializers/reflection_test.rb index bb90e81c8..b8998b189 100644 --- a/test/serializers/reflection_test.rb +++ b/test/serializers/reflection_test.rb @@ -383,7 +383,10 @@ def test_no_href_in_vanilla_reflection exception = assert_raise(NoMethodError) do reflection.instance_eval(&link) end - assert_match(/undefined method `href'/, exception.message) + + expected = RUBY_VERSION >= '3.4.0' ? /undefined method 'href'/ : /undefined method `href'/ + + assert_match(expected, exception.message) end # rubocop:disable Metrics/AbcSize diff --git a/test/support/isolated_unit.rb b/test/support/isolated_unit.rb index af80f601b..2566d2685 100644 --- a/test/support/isolated_unit.rb +++ b/test/support/isolated_unit.rb @@ -38,6 +38,7 @@ # It is also good to know what is the bare minimum to get # Rails booted up. require 'bundler/setup' unless defined?(Bundler) +require 'logger' require 'active_support' require 'active_support/core_ext/string/access' diff --git a/test/test_helper.rb b/test/test_helper.rb index 7d8ca63e3..7da8a09a6 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,6 +4,7 @@ ENV['RAILS_ENV'] = 'test' require 'bundler/setup' +require 'logger' require 'pry' require 'timecop' require 'rails'