Sha256: 2d8219b15fc7a387422ec22e6b6e7a56a72617d0f2e8321e83d06df592693ca2
Contents?: true
Size: 1.32 KB
Versions: 1
Compression:
Stored size: 1.32 KB
Contents
module RestrictCache module ActiveRecordExt def self.included(base) base.extend ClassMethods end module ClassMethods def find_and_restrict_cache(arg) records = find(arg) Array(records).each(&:restrict_cache) records end def find_from_restrict_cache(arg) contents = RestrictCache.collection.active_record.contents(self.table_name) return nil unless contents case arg when Integer contents[arg] when String contents[arg.to_i] when Array args.map {|index| contents[index.to_i] } else raise "unknown argument: #{arg.inspect}" end end def find_with_restrict_cache(arg) if restrict_cached?(Array(arg)) records = Array(arg).map {|index| find_from_restrict_cache(index) } records.size > 1 ? records : records.first else find_and_restrict_cache(arg) end end private def restrict_cached?(args) content = RestrictCache.collection.active_record.contents(self.table_name) return false unless content ids = content.keys args.all? {|index| ids.include?(index) } end end def restrict_cache RestrictCache.collection.add(self) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
restrict_cache-0.1.0 | lib/restrict_cache/active_record_ext.rb |