10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/three_d/once.rb', line 10
def once(*ids)
ids = ids.first if ids.first.is_a?(Array)
ids.each do |id|
id = id.to_s
self.instance_eval do
alias_method "__#{id}", id
define_method(id) do |*args|
ident_name = *args.hash.to_i
key_name = "#{id}_#{ident_name}_#{self.id}".gsub(/[^a-zA-Z0-9_@]/, '')
@once_cache ||= {}
if @once_cache[key_name].nil?
@once_cache[key_name] = self.send("__#{id}", *args)
end
return @once_cache[key_name]
end
end
end
end
|