module LazyInitializationAttribute def LazyInitializationAttribute.append_features(mod) super mod.const_set("LAZY_INITIALIZE_BLOCK_TABLE", {}) def mod.lazy_attr_accesser name, hook=nil, &block lazy_attr_reader name, hook, &block attr_writer name end def mod.lazy_attr_reader name, hook=nil, &block name = name.to_sym hook = hook.to_sym unless hook.nil? self::LAZY_INITIALIZE_BLOCK_TABLE[name] = block