|
f28bd955
»
|
jeremy |
2009-04-22 |
Fix dependencies revealed b... |
1 |
require 'active_support/core_ext/object/metaclass' |
|
5dd29c46
»
|
jeremy |
2009-05-13 |
Cherry-picking Active Suppo... |
2 |
require 'active_support/core_ext/module/aliasing' |
|
f28bd955
»
|
jeremy |
2009-04-22 |
Fix dependencies revealed b... |
3 |
|
|
8a9934a9
»
|
josh |
2008-07-14 |
Added Memoizable mixin for ...  |
4 |
module ActiveSupport |
|
a0f2b1d9
»
|
josh |
2009-01-27 |
Reorganize ActionController... |
5 |
module SafelyMemoizable |
| |
6 |
def safely_memoize(*symbols) |
| |
7 |
symbols.each do |symbol| |
| |
8 |
class_eval <<-RUBY, __FILE__, __LINE__ + 1 |
| |
9 |
def #{symbol}(*args) |
| |
10 |
memoized = @_memoized_#{symbol} || ::ActiveSupport::ConcurrentHash.new |
| |
11 |
memoized[args] ||= memoized_#{symbol}(*args) |
| |
12 |
end |
| |
13 |
RUBY |
| |
14 |
end |
| |
15 |
end |
| |
16 |
end |
| |
17 |
|
|
8a87d8a6
»
|
josh |
2008-07-22 |
Improved Memoizable test co... |
18 |
module Memoizable |
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
19 |
def self.memoized_ivar_for(symbol) |
|
8603813a
»
|
libc |
2008-10-05 |
Fix memoize_all for methods...  |
20 |
"@_memoized_#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym |
| |
21 |
end |
| |
22 |
|
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
23 |
module InstanceMethods |
|
8a87d8a6
»
|
josh |
2008-07-22 |
Improved Memoizable test co... |
24 |
def self.included(base) |
| |
25 |
base.class_eval do |
| |
26 |
unless base.method_defined?(:freeze_without_memoizable) |
| |
27 |
alias_method_chain :freeze, :memoizable |
| |
28 |
end |
| |
29 |
end |
| |
30 |
end |
| |
31 |
|
| |
32 |
def freeze_with_memoizable |
|
3fc9a67c
»
|
jeremy |
2008-08-13 |
memoize_ and unmemoize_all |
33 |
memoize_all unless frozen? |
| |
34 |
freeze_without_memoizable |
| |
35 |
end |
| |
36 |
|
| |
37 |
def memoize_all |
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
38 |
prime_cache ".*" |
| |
39 |
end |
| |
40 |
|
| |
41 |
def unmemoize_all |
| |
42 |
flush_cache ".*" |
| |
43 |
end |
| |
44 |
|
| |
45 |
def prime_cache(*syms) |
| |
46 |
syms.each do |sym| |
| |
47 |
methods.each do |m| |
| |
48 |
if m.to_s =~ /^_unmemoized_(#{sym})/ |
| |
49 |
if method(m).arity == 0 |
| |
50 |
__send__($1) |
| |
51 |
else |
| |
52 |
ivar = ActiveSupport::Memoizable.memoized_ivar_for($1) |
| |
53 |
instance_variable_set(ivar, {}) |
| |
54 |
end |
|
a8057669
»
|
jeremy |
2008-08-07 |
Fixed memoize with punctuat... |
55 |
end |
| |
56 |
end |
| |
57 |
end |
|
3fc9a67c
»
|
jeremy |
2008-08-13 |
memoize_ and unmemoize_all |
58 |
end |
|
ae6105ef
»
|
jeremy |
2008-07-27 |
Don't rememoize if already ... |
59 |
|
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
60 |
def flush_cache(*syms, &block) |
| |
61 |
syms.each do |sym| |
|
e4ceea37
»
|
jeem |
2009-08-09 |
make private_and_public_met... |
62 |
(methods + private_methods + protected_methods).each do |m| |
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
63 |
if m.to_s =~ /^_unmemoized_(#{sym})/ |
| |
64 |
ivar = ActiveSupport::Memoizable.memoized_ivar_for($1) |
| |
65 |
instance_variable_get(ivar).clear if instance_variable_defined?(ivar) |
| |
66 |
end |
|
3fc9a67c
»
|
jeremy |
2008-08-13 |
memoize_ and unmemoize_all |
67 |
end |
| |
68 |
end |
|
8a87d8a6
»
|
josh |
2008-07-22 |
Improved Memoizable test co... |
69 |
end |
| |
70 |
end |
| |
71 |
|
|
ef6f6625
»
|
josh |
2008-07-18 |
Changed ActiveSupport::Memo...  |
72 |
def memoize(*symbols) |
| |
73 |
symbols.each do |symbol| |
|
3fc9a67c
»
|
jeremy |
2008-08-13 |
memoize_ and unmemoize_all |
74 |
original_method = :"_unmemoized_#{symbol}" |
|
761a633a
»
|
josh |
2008-12-03 |
Add Memoizable#flush_cache ... |
75 |
memoized_ivar = ActiveSupport::Memoizable.memoized_ivar_for(symbol) |
|
ef6f6625
»
|
josh |
2008-07-18 |
Changed ActiveSupport::Memo...  |
76 |
|
|
eb9af20b
»
|
wycats |
2009-01-22 |
Begin unifying the interfac... |
77 |
class_eval <<-EOS, __FILE__, __LINE__ + 1 |
|
a2270ef2
»
|
fxn |
2008-12-28 |
Inline code comments for cl...  |
78 |
include InstanceMethods # include InstanceMethods |
| |
79 |
# |
| |
80 |
if method_defined?(:#{original_method}) # if method_defined?(:_unmemoized_mime_type) |
| |
81 |
raise "Already memoized #{symbol}" # raise "Already memoized mime_type" |
| |
82 |
end # end |
| |
83 |
alias #{original_method} #{symbol} # alias _unmemoized_mime_type mime_type |
| |
84 |
# |
| |
85 |
if instance_method(:#{symbol}).arity == 0 # if instance_method(:mime_type).arity == 0 |
| |
86 |
def #{symbol}(reload = false) # def mime_type(reload = false) |
| |
87 |
if reload || !defined?(#{memoized_ivar}) || #{memoized_ivar}.empty? # if reload || !defined?(@_memoized_mime_type) || @_memoized_mime_type.empty? |
|
1aadafda
»
|
wycats |
2009-04-08 |
Updated old AC::Base for sm... |
88 |
#{memoized_ivar} = [#{original_method}] # @_memoized_mime_type = [_unmemoized_mime_type] |
|
a2270ef2
»
|
fxn |
2008-12-28 |
Inline code comments for cl...  |
89 |
end # end |
| |
90 |
#{memoized_ivar}[0] # @_memoized_mime_type[0] |
| |
91 |
end # end |
| |
92 |
else # else |
| |
93 |
def #{symbol}(*args) # def mime_type(*args) |
| |
94 |
#{memoized_ivar} ||= {} unless frozen? # @_memoized_mime_type ||= {} unless frozen? |
| |
95 |
reload = args.pop if args.last == true || args.last == :reload # reload = args.pop if args.last == true || args.last == :reload |
| |
96 |
# |
| |
97 |
if defined?(#{memoized_ivar}) && #{memoized_ivar} # if defined?(@_memoized_mime_type) && @_memoized_mime_type |
| |
98 |
if !reload && #{memoized_ivar}.has_key?(args) # if !reload && @_memoized_mime_type.has_key?(args) |
| |
99 |
#{memoized_ivar}[args] # @_memoized_mime_type[args] |
| |
100 |
elsif #{memoized_ivar} # elsif @_memoized_mime_type |
|
1aadafda
»
|
wycats |
2009-04-08 |
Updated old AC::Base for sm... |
101 |
#{memoized_ivar}[args] = #{original_method}(*args) # @_memoized_mime_type[args] = _unmemoized_mime_type(*args) |
|
a2270ef2
»
|
fxn |
2008-12-28 |
Inline code comments for cl...  |
102 |
end # end |
| |
103 |
else # else |
| |
104 |
#{original_method}(*args) # _unmemoized_mime_type(*args) |
| |
105 |
end # end |
| |
106 |
end # end |
| |
107 |
end # end |
|
c67d25e3
»
|
Nielsomat |
2009-03-06 |
Ensure ActiveSupport::Memoi... |
108 |
# |
| |
109 |
if private_method_defined?(#{original_method.inspect}) # if private_method_defined?(:_unmemoized_mime_type) |
| |
110 |
private #{symbol.inspect} # private :mime_type |
| |
111 |
end # end |
|
ef6f6625
»
|
josh |
2008-07-18 |
Changed ActiveSupport::Memo...  |
112 |
EOS |
|
8a9934a9
»
|
josh |
2008-07-14 |
Added Memoizable mixin for ...  |
113 |
end |
| |
114 |
end |
| |
115 |
end |
| |
116 |
end |