hooopo/second_level_cache

View on GitHub
lib/second_level_cache/active_record/belongs_to_association.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

module SecondLevelCache
  module ActiveRecord
    module Associations
      module BelongsToAssociation
        def find_target
          return super unless klass.second_level_cache_enabled?
          return super if klass.default_scopes.present? || reflection.scope
          return super if reflection.active_record_primary_key.to_s != klass.primary_key

          cache_record = klass.read_second_level_cache(second_level_cache_key)
          if cache_record
            return cache_record.tap { |record| set_inverse_instance(record) }
          end

          record = super
          return nil unless record

          record.tap do |r|
            set_inverse_instance(r)
            r.write_second_level_cache
          end
        end

        private
          def second_level_cache_key
            owner[reflection.foreign_key]
          end
      end
    end
  end
end