module ActiveRecord::PGCollation

Constants

KNOWN_VERSIONS
VERSION

Attributes

enabled_version[R]

Public Class Methods

detected_version() click to toggle source
# File lib/active_record/pg_collation.rb, line 28
def detected_version
  approximate_version(Gem.loaded_specs["activerecord"].version)
end
install(version) click to toggle source
# File lib/active_record/pg_collation.rb, line 11
def install(version)
  @enabled_version = approximate_version(version)

  # Don't immediately fail if we don't yet support the current version.
  # There's at least a chance it could work.
  if !KNOWN_VERSIONS.include?(enabled_version) && enabled_version > KNOWN_VERSIONS.last
    @enabled_version = KNOWN_VERSIONS.last
    warn("[PGCollation] Current ActiveRecord version unsupported! Falling back to: #{enabled_version}")
  end

  initialize!
end
register(patch, &block) click to toggle source
# File lib/active_record/pg_collation.rb, line 24
def register(patch, &block)
  monkeypatches[patch] = block
end

Private Class Methods

approximate_version(version) click to toggle source
# File lib/active_record/pg_collation.rb, line 34
def approximate_version(version)
  segments = version.respond_to?(:canonical_segments) ? version.canonical_segments.dup : version.segments

  segments.pop while segments.any? {|s| String === s}
  segments.pop while segments.size > 2
  segments.push(0) while segments.size < 2

  Gem::Version.new(segments.join("."))
end
initialize!() click to toggle source
# File lib/active_record/pg_collation.rb, line 48
def initialize!
  require "active_record/pg_collation/command_recorder"
  require "active_record/pg_collation/postgresql_adapter"
  require "active_record/pg_collation/schema_statements"

  Dir[File.join(__dir__, "pg_collation", enabled_version.to_s, "*.rb")].each {|file| require file}
  monkeypatches.keys.each {|patch| monkeypatches.delete(patch).call}
end
monkeypatches() click to toggle source
# File lib/active_record/pg_collation.rb, line 44
def monkeypatches
  @patches ||= {}
end