Class: ActiveSupport::Cache::Entry

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

Overview

Entry that is put into caches. It supports expiration time on entries and can compress values to save space in the cache.

Constant Summary collapse

DEFAULT_COMPRESS_LIMIT =
16.kilobytes

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

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



553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
# File 'activesupport/lib/active_support/cache.rb', line 553

def initialize(value, options = {})
  @compressed = false
  @expires_in = options[:expires_in]
  @expires_in = @expires_in.to_f if @expires_in
  @created_at = Time.now.to_f
  if value
    if should_compress?(value, options)
      @value = Zlib::Deflate.deflate(Marshal.dump(value))
      @compressed = true
    else
      @value = value
    end
  else
    @value = nil
  end
end

Instance Attribute Details

#created_atObject (readonly)

Returns the value of attribute created_at



533
534
535
# File 'activesupport/lib/active_support/cache.rb', line 533

def created_at
  @created_at
end

#expires_inObject (readonly)

Returns the value of attribute expires_in



533
534
535
# File 'activesupport/lib/active_support/cache.rb', line 533

def expires_in
  @expires_in
end

Class Method Details

.create(raw_value, created_at, options = {}) ⇒ Object

Create an entry with internal attributes set. This method is intended to be used by implementations that store cache entries in a native format instead of as serialized Ruby objects.



541
542
543
544
545
546
547
548
# File 'activesupport/lib/active_support/cache.rb', line 541

def create (raw_value, created_at, options = {})
  entry = new(nil)
  entry.instance_variable_set(:@value, raw_value)
  entry.instance_variable_set(:@created_at, created_at.to_f)
  entry.instance_variable_set(:@compressed, !!options[:compressed])
  entry.instance_variable_set(:@expires_in, options[:expires_in])
  entry
end

Instance Method Details

#compressed?Boolean

Returns:

  • (Boolean)


586
587
588
# File 'activesupport/lib/active_support/cache.rb', line 586

def compressed?
  @compressed
end

#expired?Boolean

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

Returns:

  • (Boolean)


592
593
594
# File 'activesupport/lib/active_support/cache.rb', line 592

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

#expires_atObject

Seconds since the epoch when the entry will expire.



606
607
608
# File 'activesupport/lib/active_support/cache.rb', line 606

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

#expires_at=(time) ⇒ Object

Set a new time when the entry will expire.



597
598
599
600
601
602
603
# File 'activesupport/lib/active_support/cache.rb', line 597

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

#raw_valueObject

Get the raw value. This value may be serialized and compressed.



571
572
573
# File 'activesupport/lib/active_support/cache.rb', line 571

def raw_value
  @value
end

#sizeObject

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



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

def size
  if @value.nil?
    0
  elsif @value.respond_to?(:bytesize)
    @value.bytesize
  else
    Marshal.dump(@value).bytesize
  end
end

#valueObject

Get the value stored in the cache.



576
577
578
579
580
581
582
583
584
# File 'activesupport/lib/active_support/cache.rb', line 576

def value
  if @value
    val = compressed? ? Marshal.load(Zlib::Inflate.inflate(@value)) : @value
    unless val.frozen?
      val.freeze rescue nil
    end
    val
  end
end