Skip to content

Instantly share code, notes, and snippets.

@wesley6j
Forked from Mikr0Tik/acts_as_cacheable.rb
Created October 14, 2016 11:11
Show Gist options
  • Select an option

  • Save wesley6j/c088ea82b157a0ba1fa0183937083c68 to your computer and use it in GitHub Desktop.

Select an option

Save wesley6j/c088ea82b157a0ba1fa0183937083c68 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous revised this gist Mar 1, 2009. 1 changed file with 25 additions and 9 deletions.
    34 changes: 25 additions & 9 deletions acts_as_cacheable.rb
    Original file line number Diff line number Diff line change
    @@ -1,17 +1,33 @@
    module Acts
    module Cacheable
    def acts_as_cacheable(key, options = {})
    find(:all, options).each{|instance| class_finders[instance.send(key).to_s] = instance}
    class_eval <<-EOF
    def self.[] (key)
    class_finders[key]
    end
    EOF
    def self.included(base)
    base.extend(ClassMethods)
    end

    def class_finders
    @class_finders ||= Hash.new
    module ClassMethods
    def acts_as_cacheable(key, options = {})
    extend Acts::Cacheable::SingletonMethods
    find(:all, options).each{|instance| cached_objects[instance.send(key).to_s] = instance}
    end
    end

    module SingletonMethods
    def [] (key)
    cached_objects[key]
    end

    def cached(id)
    cached_objects.each_value{|instance| return instance if instance.id == id}
    end

    def objects
    cached_objects.values
    end

    private
    def cached_objects
    @all_cached_objects ||= Hash.new
    end
    end
    end
    end
  2. @invalid-email-address Anonymous revised this gist Mar 1, 2009. 2 changed files with 6 additions and 8 deletions.
    11 changes: 3 additions & 8 deletions acts_as_cacheable.rb
    Original file line number Diff line number Diff line change
    @@ -1,21 +1,16 @@
    module Acts
    module Cacheable
    def acts_as_cacheable(key, options = {})
    validates_uniqueness_of key
    find(:all, options).each{|instance| class_finders[key][instance.send(key).to_s] = instance}
    find(:all, options).each{|instance| class_finders[instance.send(key).to_s] = instance}
    class_eval <<-EOF
    def self.[] (key)
    class_finders[#{key.inspect}][key]
    end
    def self.cached(id)
    class_finders[#{key.inspect}].each_value{|instance| return instance if instance.id == id}
    class_finders[key]
    end
    EOF
    end

    def class_finders
    @class_finders ||= Hash.new {|hash, key| hash[key] = {} }
    @class_finders ||= Hash.new
    end

    end
    3 changes: 3 additions & 0 deletions person.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    class Person < ActiveRecord::Base
    acts_as_cacheable :login, :conditions => {:admin => true}
    end
  3. @invalid-email-address Anonymous revised this gist Mar 1, 2009. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions acts_as_cacheable.rb
    Original file line number Diff line number Diff line change
    @@ -1,15 +1,15 @@
    module Acts
    module Cacheable
    def acts_as_cacheable(method, options = {})
    validates_uniqueness_of method
    find(:all, options).each{|instance| class_finders[method][instance.send(method).to_s] = instance}
    def acts_as_cacheable(key, options = {})
    validates_uniqueness_of key
    find(:all, options).each{|instance| class_finders[key][instance.send(key).to_s] = instance}
    class_eval <<-EOF
    def self.[] (key)
    class_finders[#{method.inspect}][key]
    class_finders[#{key.inspect}][key]
    end
    def self.cached(id)
    class_finders[#{method.inspect}].each_value{|instance| return instance if instance.id == id}
    class_finders[#{key.inspect}].each_value{|instance| return instance if instance.id == id}
    end
    EOF
    end
  4. @invalid-email-address Anonymous created this gist Mar 1, 2009.
    22 changes: 22 additions & 0 deletions acts_as_cacheable.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    module Acts
    module Cacheable
    def acts_as_cacheable(method, options = {})
    validates_uniqueness_of method
    find(:all, options).each{|instance| class_finders[method][instance.send(method).to_s] = instance}
    class_eval <<-EOF
    def self.[] (key)
    class_finders[#{method.inspect}][key]
    end
    def self.cached(id)
    class_finders[#{method.inspect}].each_value{|instance| return instance if instance.id == id}
    end
    EOF
    end

    def class_finders
    @class_finders ||= Hash.new {|hash, key| hash[key] = {} }
    end

    end
    end
    3 changes: 3 additions & 0 deletions unit.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    class Unit < ActiveRecord::Base
    acts_as_cacheable :key
    end