lib/memoist.rb in memoist-0.15.0 vs lib/memoist.rb in memoist-0.16.0
- old
+ new
@@ -1,32 +1,42 @@
# frozen_string_literal: true
+
require 'memoist/version'
require 'memoist/core_ext/singleton_class'
module Memoist
+ def self.extended(extender)
+ Memoist.memoist_eval(extender) do
+ unless singleton_class.method_defined?(:memoized_methods)
+ def self.memoized_methods
+ @_memoized_methods ||= []
+ end
+ end
+ end
+ end
- def self.memoized_ivar_for(method_name, identifier=nil)
+ def self.memoized_ivar_for(method_name, identifier = nil)
"@#{memoized_prefix(identifier)}_#{escape_punctuation(method_name)}"
end
- def self.unmemoized_method_for(method_name, identifier=nil)
+ def self.unmemoized_method_for(method_name, identifier = nil)
"#{unmemoized_prefix(identifier)}_#{method_name}".to_sym
end
- def self.memoized_prefix(identifier=nil)
+ def self.memoized_prefix(identifier = nil)
if identifier
"_memoized_#{identifier}"
else
- "_memoized".freeze
+ '_memoized'.freeze
end
end
- def self.unmemoized_prefix(identifier=nil)
+ def self.unmemoized_prefix(identifier = nil)
if identifier
"_unmemoized_#{identifier}"
else
- "_unmemoized".freeze
+ '_unmemoized'.freeze
end
end
def self.escape_punctuation(string)
string = string.is_a?(String) ? string.dup : string.to_s
@@ -64,11 +74,12 @@
def unmemoize_all
flush_cache
end
def memoized_structs(names)
- structs = self.class.all_memoized_structs
+ ref_obj = self.class.respond_to?(:class_eval) ? singleton_class : self
+ structs = ref_obj.all_memoized_structs
return structs if names.empty?
structs.select { |s| names.include?(s.memoized_method) }
end
@@ -98,11 +109,11 @@
# Collect the memoized_methods of ancestors in ancestor order
# unless we already have it since self or parents could be overriding
# an ancestor method.
ancestors.grep(Memoist).each do |ancestor|
ancestor.memoized_methods.each do |m|
- structs << m unless structs.any? {|am| am.memoized_method == m.memoized_method }
+ structs << m unless structs.any? { |am| am.memoized_method == m.memoized_method }
end
end
structs
end
end
@@ -110,22 +121,12 @@
def clear_structs
@all_memoized_structs = nil
end
def memoize(*method_names)
- if method_names.last.is_a?(Hash)
- identifier = method_names.pop[:identifier]
- end
+ identifier = method_names.pop[:identifier] if method_names.last.is_a?(Hash)
- Memoist.memoist_eval(self) do
- unless singleton_class.method_defined?(:memoized_methods)
- def self.memoized_methods
- @_memoized_methods ||= []
- end
- end
- end
-
method_names.each do |method_name|
unmemoized_method = Memoist.unmemoized_method_for(method_name, identifier)
memoized_ivar = Memoist.memoized_ivar_for(method_name, identifier)
Memoist.memoist_eval(self) do
@@ -136,11 +137,11 @@
return
end
alias_method unmemoized_method, method_name
mm = MemoizedMethod.new(method_name, memoized_ivar, instance_method(method_name).arity)
- self.memoized_methods << mm
+ memoized_methods << mm
if mm.arity == 0
# define a method like this;
# def mime_type(reload=true)
@@ -233,7 +234,6 @@
end
end
# return a chainable method_name symbol if we can
method_names.length == 1 ? method_names.first : method_names
end
-
end