module RailheadMemorize::ClassMethods

Public Instance Methods

memorize(key) click to toggle source
# File lib/railhead_memorize.rb, line 10
    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