Sha256: f27eed09984aea056cd28e48ca684ceea7a8715632718a5fa527e526f2d2327d
Contents?: true
Size: 1.11 KB
Versions: 3
Compression:
Stored size: 1.11 KB
Contents
require 'digest' module Patterns class Calculation class_attribute :cache_expiry_every def initialize(*args) @options = args.extract_options! @subject = args.first end def self.result(*args, &block) new(*args).cached_result(&block) end class << self alias_method :result_for, :result alias_method :calculate, :result end def self.set_cache_expiry_every(period) self.cache_expiry_every = period end def cached_result(&block) if cache_expiry_period.blank? result(&block) else Rails.cache.fetch(cache_key, expires_in: cache_expiry_period) do result(&block) end end end private attr_reader :subject, :options def result raise NotImplementedError end def cache_key "#{self.class.name}_#{hash_of(subject, options)}" end def self.hash_of(*args) Digest::SHA1.hexdigest(args.map(&:to_s).join(':')) end def hash_of(*args) self.class.hash_of(*args) end def cache_expiry_period self.class.cache_expiry_every end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rails-patterns-0.11.0 | lib/patterns/calculation.rb |
rails-patterns-0.10.0 | lib/patterns/calculation.rb |
rails-patterns-0.9.0 | lib/patterns/calculation.rb |