Module: ThreeD::Once::ClassMethods

Defined in:
lib/three_d/once.rb

Instance Method Summary collapse

Instance Method Details

#once(*ids) ⇒ Object



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)
  # Auch Array kann übergeben werde
  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
      
        # Use @once_cache[]
        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