Class: CachedAccessor::Define

Inherits:
Object
  • Object
show all
Defined in:
lib/pic2ch/cached_accessor.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass, &block) ⇒ Define

Returns a new instance of Define.



16
17
18
19
# File 'lib/pic2ch/cached_accessor.rb', line 16

def initialize(klass, &block)
  @klass = klass
  instance_eval(&block)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(symbol, &block) ⇒ Object



21
22
23
24
25
26
# File 'lib/pic2ch/cached_accessor.rb', line 21

def method_missing(symbol, &block)
  cached = "__cached__#{symbol}"
  @klass.send(:define_method, cached, &block)
  @klass.class_eval("def #{symbol} ;@#{symbol} ||= #{cached}; end", "(__CACHED_ACCESSOR__)", 1)
  @klass.class_eval("def #{symbol}!;@#{symbol}   = #{cached}; end", "(__CACHED_ACCESSOR__)", 2) unless /\?|!/ === symbol.to_s
end