Sha256: 5af136bb1ba100ca7630be886af1b22254b3240756f5988c324b68002fe1f7b7

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

module RailheadMemorize

  def self.included(base)
    base.extend ClassMethods
  end


  module ClassMethods

    def memorize(key)
      class_eval <<-END
        alias #{key}_unmemorized #{key}

        def memorize_#{key}
          unless frozen?
            _memorize_#{key} = #{key}_unmemorized
            if respond_to?(:memorized_#{key}) and (memorized_#{key}.blank? or MultiJson.load(memorized_#{key}) != _memorize_#{key})
              update_column :memorized_#{key}, MultiJson.dump(_memorize_#{key})
            end
            _memorize_#{key}
          end
        end

        def #{key}
          @_#{key} ||= if respond_to?(:memorized_#{key})
            if not memorized_#{key}.blank?
              begin
                MultiJson.load(memorized_#{key})
              rescue
                memorize_#{key}
              end
            else
              memorize_#{key}
            end
          else
            #{key}_unmemorized
          end
        end
      END
    end
  end
end


module RailheadMemorizeLoader

  def self.included(base)
    base.extend ClassMethods
  end


  module ClassMethods

    def use_memorize
      include RailheadMemorize
    end
  end
end


ActiveRecord::Base.send :include, RailheadMemorizeLoader

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
railhead_memorize-0.2.0 lib/railhead_memorize.rb