Sha256: 0bce1f2a0c4b675b4937e4599cf12a7ce2bec28ada83cade011b33978c4f3d72

Contents?: true

Size: 712 Bytes

Versions: 1

Compression:

Stored size: 712 Bytes

Contents

# frozen_string_literal: true

module Lite
  module Memoize
    module Mixin

      def store
        @_memoized_methods ||= {}
      end

      def caller_key(block, as: nil)
        name = as ? [as] : block.source_location
        return name.concat(block) if block.is_a?(Array)

        block.binding.local_variables.each_with_object(name) do |local_name, array|
          array << local_name
          array << block.binding.local_variable_get(local_name)
        end
      end

      def memoize(method_name, args: nil, reload: false)
        key = "#{method_name}:#{args}"

        if reload
          store[key] = yield
        else
          store[key] ||= yield
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lite-memoize-1.0.1 lib/lite/memoize/mixin.rb