Entry that is put into caches. It supports expiration time on entries and can compress values to save space in the cache.
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.
# File 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
Create a new cache entry for the specified value. Options supported are
:compress
, :compress_threshold
, and
:expires_in
.
# File 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.nil? @value = nil else @value = Marshal.dump(value) if should_compress?(@value, options) @value = Zlib::Deflate.deflate(@value) @compressed = true end end end
# File lib/active_support/cache.rb, line 594 def compressed? @compressed end
Check if the entry is expired. The expires_in
parameter can
override the value set when the entry was created.
# File lib/active_support/cache.rb, line 600 def expired? @expires_in && @created_at + @expires_in <= Time.now.to_f end
Seconds since the epoch when the entry will expire.
# File lib/active_support/cache.rb, line 614 def expires_at @expires_in ? @created_at + @expires_in : nil end
Set a new time when the entry will expire.
# File lib/active_support/cache.rb, line 605 def expires_at=(time) if time @expires_in = time.to_f - @created_at else @expires_in = nil end end
Get the raw value. This value may be serialized and compressed.
# File lib/active_support/cache.rb, line 570 def raw_value @value end
Returns the size of the cached value. This could be less than value.size if the data is compressed.
# File lib/active_support/cache.rb, line 620 def size if @value.nil? 0 else @value.bytesize end end
Get the value stored in the cache.
# File lib/active_support/cache.rb, line 575 def value # If the original value was exactly false @value is still true because # it is marshalled and eventually compressed. Both operations yield # strings. if @value # In rails 3.1 and earlier values in entries did not marshaled without # options[:compress] and if it's Numeric. # But after commit a263f377978fc07515b42808ebc1f7894fafaa3a # all values in entries are marshalled. And after that code below expects # that all values in entries will be marshaled (and will be strings). # So here we need a check for old ones. begin Marshal.load(compressed? ? Zlib::Inflate.inflate(@value) : @value) rescue TypeError compressed? ? Zlib::Inflate.inflate(@value) : @value end end end