Class: ActiveSupport::Cache::Entry

Inherits:
Object
  • Object
show all
Defined in:
lib/active_support/cache.rb

Overview

This class is used to represent cache entries. Cache entries have a value, an optional expiration time, and an optional version. The expiration time is used to support the :race_condition_ttl option on the cache. The version is used to support the :version option on the cache for rejecting mismatches.

Since cache entries in most instances will be serialized, the internals of this class are highly optimized using short instance variable names that are lazily defined.

Constant Summary collapse

DEFAULT_COMPRESS_LIMIT =
1.kilobyte

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value, compress: true, compress_threshold: DEFAULT_COMPRESS_LIMIT, version: nil, expires_in: nil) ⇒ Entry

Creates a new cache entry for the specified value. Options supported are :compress, :compress_threshold, :version and :expires_in.



786
787
788
789
790
791
792
793
# File 'lib/active_support/cache.rb', line 786

def initialize(value, compress: true, compress_threshold: DEFAULT_COMPRESS_LIMIT, version: nil, expires_in: nil, **)
  @value      = value
  @version    = version
  @created_at = Time.now.to_f
  @expires_in = expires_in && expires_in.to_f

  compress!(compress_threshold) if compress
end

Instance Attribute Details

#versionObject (readonly)

:nodoc:



780
781
782
# File 'lib/active_support/cache.rb', line 780

def version
  @version
end

Instance Method Details

#bytesizeObject

Returns the size of the cached value. This could be less than value.bytesize if the data is compressed.



823
824
825
826
827
828
829
830
831
832
# File 'lib/active_support/cache.rb', line 823

def bytesize
  case value
  when NilClass
    0
  when String
    @value.bytesize
  else
    @s ||= Marshal.dump(@value).bytesize
  end
end

#dup_value!Object

Duplicates the value in a class. This is used by cache implementations that don't natively serialize entries to protect against accidental cache modifications.



836
837
838
839
840
841
842
843
844
# File 'lib/active_support/cache.rb', line 836

def dup_value!
  if @value && !compressed? && !(@value.is_a?(Numeric) || @value == true || @value == false)
    if @value.is_a?(String)
      @value = @value.dup
    else
      @value = Marshal.load(Marshal.dump(@value))
    end
  end
end

#expired?Boolean

Checks if the entry is expired. The expires_in parameter can override the value set when the entry was created.

Returns:

  • (Boolean)


805
806
807
# File 'lib/active_support/cache.rb', line 805

def expired?
  @expires_in && @created_at + @expires_in <= Time.now.to_f
end

#expires_atObject



809
810
811
# File 'lib/active_support/cache.rb', line 809

def expires_at
  @expires_in ? @created_at + @expires_in : nil
end

#expires_at=(value) ⇒ Object



813
814
815
816
817
818
819
# File 'lib/active_support/cache.rb', line 813

def expires_at=(value)
  if value
    @expires_in = value.to_f - @created_at
  else
    @expires_in = nil
  end
end

#mismatched?(version) ⇒ Boolean

Returns:

  • (Boolean)


799
800
801
# File 'lib/active_support/cache.rb', line 799

def mismatched?(version)
  @version && version && @version != version
end

#valueObject



795
796
797
# File 'lib/active_support/cache.rb', line 795

def value
  compressed? ? uncompress(@value) : @value
end