diff --git a/.github/workflows/declare_schema_build.yml b/.github/workflows/declare_schema_build.yml index 063a576c..caa82e17 100644 --- a/.github/workflows/declare_schema_build.yml +++ b/.github/workflows/declare_schema_build.yml @@ -4,20 +4,23 @@ on: [push] name: DeclareSchema Build jobs: - build: + tests: name: DeclareSchema Build runs-on: ubuntu-latest strategy: fail-fast: false matrix: adapter: [mysql, postgresql, sqlite3] - ruby: ['3.0', 3.1, 3.2, 3.3] + ruby: [3.1, 3.2, 3.3, 3.4] gemfile: - gemfiles/rails_6_1.gemfile - gemfiles/rails_7_0.gemfile - gemfiles/rails_7_1.gemfile - gemfiles/rails_7_2.gemfile + - gemfiles/rails_8_0.gemfile exclude: + - ruby: 3.1 + gemfile: gemfiles/rails_8_0.gemfile - adapter: mysql ruby: 3.3 gemfile: gemfiles/rails_6_1.gemfile @@ -28,15 +31,17 @@ jobs: ruby: 3.3 gemfile: gemfiles/rails_6_1.gemfile - adapter: mysql - ruby: '3.0' - gemfile: gemfiles/rails_7_2.gemfile + ruby: 3.4 + gemfile: gemfiles/rails_6_1.gemfile - adapter: postgresql - ruby: '3.0' - gemfile: gemfiles/rails_7_2.gemfile + ruby: 3.4 + gemfile: gemfiles/rails_6_1.gemfile - adapter: sqlite3 - ruby: '3.0' - gemfile: gemfiles/rails_7_2.gemfile - + ruby: 3.4 + gemfile: gemfiles/rails_6_1.gemfile + # TODO: Support SQLite3 with Rails 8.0 + - adapter: sqlite3 + gemfile: gemfiles/rails_8_0.gemfile env: BUNDLE_GEMFILE: "${{ matrix.gemfile }}" MYSQL_HOST: 127.0.0.1 diff --git a/lib/declare_schema/dsl.rb b/lib/declare_schema/dsl.rb index 12cf38a9..2589595c 100644 --- a/lib/declare_schema/dsl.rb +++ b/lib/declare_schema/dsl.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'active_support/proxy_object' - module DeclareSchema class Dsl < BasicObject # avoid Object because that gets extended by lots of gems include ::Kernel # but we need the basic class methods diff --git a/lib/declare_schema/field_declaration_dsl.rb b/lib/declare_schema/field_declaration_dsl.rb index 4484d7f4..cd97b5ec 100644 --- a/lib/declare_schema/field_declaration_dsl.rb +++ b/lib/declare_schema/field_declaration_dsl.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'active_support/proxy_object' - module DeclareSchema class FieldDeclarationDsl < BasicObject # avoid Object because that gets extended by lots of gems include ::Kernel # but we need the basic class methods diff --git a/spec/lib/declare_schema/migration_generator_spec.rb b/spec/lib/declare_schema/migration_generator_spec.rb index 7a47f7de..b75d249f 100644 --- a/spec/lib/declare_schema/migration_generator_spec.rb +++ b/spec/lib/declare_schema/migration_generator_spec.rb @@ -899,7 +899,12 @@ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock end up, _down = Generators::DeclareSchema::Migration::Migrator.run ActiveRecord::Migration.class_eval(up) - expect(Ad.field_specs['company'].options[:validates].inspect).to eq("{:presence=>true, :uniqueness=>{:case_sensitive=>false}}") + + if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.4") + expect(Ad.field_specs['company'].options[:validates].inspect).to eq("{:presence=>true, :uniqueness=>{:case_sensitive=>false}}") + else + expect(Ad.field_specs['company'].options[:validates].inspect).to eq("{presence: true, uniqueness: {case_sensitive: false}}") + end # DeclareSchema supports has_and_belongs_to_many relationships and generates the intersection ("join") table # with appropriate primary key, indexes, and foreign keys. diff --git a/spec/lib/declare_schema/model/table_options_definition_spec.rb b/spec/lib/declare_schema/model/table_options_definition_spec.rb index 4b90d902..4a2fcda9 100644 --- a/spec/lib/declare_schema/model/table_options_definition_spec.rb +++ b/spec/lib/declare_schema/model/table_options_definition_spec.rb @@ -24,7 +24,11 @@ class TableOptionsDefinitionTestModel < ActiveRecord::Base # rubocop:disable Lin describe '#to_key' do subject { model.to_key } - it { is_expected.to eq(['table_options_definition_test_models', "{:charset=>#{charset.inspect}, :collation=>#{collation.inspect}}"]) } + if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.4") + it { is_expected.to eq(['table_options_definition_test_models', "{:charset=>#{charset.inspect}, :collation=>#{collation.inspect}}"]) } + else + it { is_expected.to eq(['table_options_definition_test_models', "{charset: #{charset.inspect}, collation: #{collation.inspect}}"]) } + end end describe '#settings' do @@ -56,7 +60,11 @@ class TableOptionsDefinitionTestModel < ActiveRecord::Base # rubocop:disable Lin describe '#hash' do subject { model.hash } - it { is_expected.to eq(['table_options_definition_test_models', "{:charset=>#{charset.inspect}, :collation=>#{collation.inspect}}"].hash) } + if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.4") + it { is_expected.to eq(['table_options_definition_test_models', "{:charset=>#{charset.inspect}, :collation=>#{collation.inspect}}"].hash) } + else + it { is_expected.to eq(['table_options_definition_test_models', "{charset: #{charset.inspect}, collation: #{collation.inspect}}"].hash) } + end end describe '#to_s' do