lib/second_level_cache/active_record.rb
# frozen_string_literal: true
require "second_level_cache/mixin"
require "second_level_cache/active_record/base"
require "second_level_cache/active_record/core"
require "second_level_cache/active_record/fetch_by_uniq_key"
require "second_level_cache/active_record/finder_methods"
require "second_level_cache/active_record/persistence"
require "second_level_cache/active_record/belongs_to_association"
require "second_level_cache/active_record/has_one_association"
require "second_level_cache/active_record/preloader/association"
require "second_level_cache/active_record/preloader/legacy"
# http://api.rubyonrails.org/classes/ActiveSupport/LazyLoadHooks.html
# ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base)
ActiveSupport.on_load(:active_record, run_once: true) do
if Bundler.definition.dependencies.find { |x| x.name == "paranoia" }
require "second_level_cache/adapter/paranoia"
include SecondLevelCache::Adapter::Paranoia::ActiveRecord
SecondLevelCache::Mixin.send(:prepend, SecondLevelCache::Adapter::Paranoia::Mixin)
end
include SecondLevelCache::Mixin
prepend SecondLevelCache::ActiveRecord::Base
extend SecondLevelCache::ActiveRecord::FetchByUniqKey
prepend SecondLevelCache::ActiveRecord::Persistence
ActiveRecord::Associations::BelongsToAssociation.send(:prepend, SecondLevelCache::ActiveRecord::Associations::BelongsToAssociation)
ActiveRecord::Associations::HasOneAssociation.send(:prepend, SecondLevelCache::ActiveRecord::Associations::HasOneAssociation)
ActiveRecord::Relation.send(:prepend, SecondLevelCache::ActiveRecord::FinderMethods)
# https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/associations/preloader/association.rb#L117
if ::ActiveRecord.version < ::Gem::Version.new("7")
ActiveRecord::Associations::Preloader::Association.send(:prepend, SecondLevelCache::ActiveRecord::Associations::Preloader::Association::Legacy)
end
if ::ActiveRecord.version >= ::Gem::Version.new("7")
# https://github.com/rails/rails/blob/7-0-stable/activerecord/lib/active_record/associations/preloader/association.rb#L25
ActiveRecord::Associations::Preloader::Association.send(:prepend, SecondLevelCache::ActiveRecord::Associations::Preloader::Association)
ActiveRecord::Associations::Preloader::Association::LoaderQuery.send(:prepend, SecondLevelCache::ActiveRecord::Associations::Preloader::Association::LoaderQuery)
end
end