Sha256: 4ce1d3165159816a5ca9cf1f4917a7dd2b04ec08521415e9258d7e34e4773771

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require 'active_support'
require 'multi_json'


module RailheadMemorize

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

  module ClassMethods

    def memorize(key, options = {})
      options.reverse_merge! :on_view => true
      class_eval <<-END
        alias #{key}_unmemorized #{key}
        before_create :initialize_memorized_#{key}

        def initialize_memorized_#{key}
          self.memorized_#{key} = MultiJson.dump(#{options[:default] ? options[:default].inspect : '[]'}) if respond_to?(:memorized_#{key})
        end

        def memorize_#{key}
          update_column :memorized_#{key}, MultiJson.dump(#{key}_unmemorized) if respond_to?(:memorized_#{key}) and not frozen?
          @#{key} = nil
        end

        def #{key}
          @#{key} ||= if respond_to?(:memorized_#{key})
            if not memorized_#{key}.blank?
              begin
                MultiJson.load(memorized_#{key})
              rescue
                memorize_#{key}
                #{key}
              end
            elsif #{!!options[:on_view]}
              memorize_#{key}
              #{key}
            else
              #{key}_unmemorized
            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

2 entries across 2 versions & 1 rubygems

Version Path
railhead_memorize-0.1.2 lib/railhead_memorize.rb
railhead_memorize-0.1.1 lib/railhead_memorize.rb