Module: PaperTrail::Compatibility

Defined in:
lib/paper_trail/compatibility.rb

Overview

Rails does not follow SemVer, makes breaking changes in minor versions. Breaking changes are expected, and are generally good for the rails ecosystem. However, they often require dozens of hours to fix, even with the [help of experts](github.com/paper-trail-gem/paper_trail/pull/899).

It is not safe to assume that a new version of rails will be compatible with PaperTrail. PT is only compatible with the versions of rails that it is tested against. See ‘.github/workflows/test.yml`.

However, as of [#1213](github.com/paper-trail-gem/paper_trail/pull/1213) our gemspec allows installation with newer, incompatible rails versions. We hope this will make it easier for contributors to work on compatibility with newer rails versions. Most PT users should avoid incompatible rails versions.

Constant Summary collapse

ACTIVERECORD_GTE =

enforced in gemspec

">= 6.1"
ACTIVERECORD_LT =

not enforced in gemspec

"< 8.1"
E_INCOMPATIBLE_AR =
<<-EOS
  PaperTrail %s is not compatible with ActiveRecord %s. We allow PT
  contributors to install incompatible versions of ActiveRecord, and this
  warning can be silenced with an environment variable, but this is a bad
  idea for normal use. Please install a compatible version of ActiveRecord
  instead (%s). Please see the discussion in paper_trail/compatibility.rb
  for details.
EOS

Class Method Summary collapse

Class Method Details

.check_activerecord(ar_version) ⇒ Object

Normal users need a warning if they accidentally install an incompatible version of ActiveRecord. Contributors can silence this warning with an environment variable.

Raises:

  • (::TypeError)


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/paper_trail/compatibility.rb', line 35

def self.check_activerecord(ar_version)
  raise ::TypeError unless ar_version.instance_of?(::Gem::Version)
  return if ::ENV["PT_SILENCE_AR_COMPAT_WARNING"].present?
  req = ::Gem::Requirement.new([ACTIVERECORD_GTE, ACTIVERECORD_LT])
  unless req.satisfied_by?(ar_version)
    ::Kernel.warn(
      format(
        E_INCOMPATIBLE_AR,
        ::PaperTrail.gem_version,
        ar_version,
        req
      )
    )
  end
end