Class: ActiveSupport::Cache::Entry

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

Overview

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

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 =
16.kilobytes

Instance Method Summary collapse

Constructor Details

#initialize(value, options = {}) ⇒ Entry

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


612
613
614
615
616
617
618
619
620
621
622
623
# File 'activesupport/lib/active_support/cache.rb', line 612

def initialize(value, options = {})
  if should_compress?(value, options)
    @value = compress(value)
    @compressed = true
  else
    @value = value
  end

  @created_at = Time.now.to_f
  @expires_in = options[:expires_in]
  @expires_in = @expires_in.to_f if @expires_in
end

Instance Method Details

#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.


666
667
668
669
670
671
672
673
674
# File 'activesupport/lib/active_support/cache.rb', line 666

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.


631
632
633
# File 'activesupport/lib/active_support/cache.rb', line 631

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

#expires_atObject


635
636
637
# File 'activesupport/lib/active_support/cache.rb', line 635

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

#expires_at=(value) ⇒ Object


639
640
641
642
643
644
645
# File 'activesupport/lib/active_support/cache.rb', line 639

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

#sizeObject

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


649
650
651
652
653
654
655
656
657
658
659
660
661
662
# File 'activesupport/lib/active_support/cache.rb', line 649

def size
  if defined?(@s)
    @s
  else
    case value
    when NilClass
      0
    when String
      @value.bytesize
    else
      @s = Marshal.dump(@value).bytesize
    end
  end
end

#valueObject


625
626
627
# File 'activesupport/lib/active_support/cache.rb', line 625

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