Sha256: 38174c7b4f434b79028ea55f34465ebcdfc0ebafd709e750db287d9f07d30a8f

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

module ActiveRecord
  module ConnectionAdapters
    class AbstractMysqlAdapter
      class << self
        def register_enum_type(mapping)
          mapping.register_type(%r(enum)i) do |sql_type|
            Type::Enum.new(limit: sql_type.to_s.scan(/'(.*?)'/).flatten)
          end
        end
      end

      # In Rails 6.1, registering the enum type is an instance method and is
      # done on initialization, In Rails 7.0 it is a class method and
      # the registration happens when the class is loaded. So, in Rails 6.1,
      # we can override the `initialize_type_map` method to register the enum
      # but in Rails 7.1, we need to call register_enum_type explicitly.

      if SqlEnum.rails_version_match?("6.1")
        module SqlEnumMapper
          def initialize_type_map(m = type_map)
            super(m)
            AbstractMysqlAdapter.register_enum_type(m)
          end
        end

        ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(SqlEnumMapper)
      end


      if SqlEnum.rails_version_match?("7.0")
        [
          ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP,
          ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP_WITH_BOOLEAN
        ].each do |m|
          AbstractMysqlAdapter.register_enum_type(m)
        end
      end

      # Rails 7.1 drops the TYPE_MAP_WITH_BOOLEAN constant
      if SqlEnum.rails_version_match?("7.1")
          AbstractMysqlAdapter.register_enum_type(
            ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP
          )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sql_enum-1.0.0 lib/active_record/connection_adapters/abstract_mysql.rb