lib/wolverine.rb in wolverine-0.2.5 vs lib/wolverine.rb in wolverine-0.2.6
- old
+ new
@@ -28,10 +28,11 @@
# manually reset the cache using +reset!+.
#
# @return [void]
def self.reset!
@root_directory = nil
+ reset_cached_methods
end
# Used to handle dynamic accesses to scripts. Successful lookups will be
# cached on the {PathComponent} object. See {PathComponent#method_missing}
# for more detail on how this works.
@@ -56,10 +57,11 @@
config.redis
end
def reset!
@root_directory = nil
+ reset_cached_methods
end
def method_missing sym, *args
root_directory.send(sym, *args)
rescue PathComponent::MissingTemplate
@@ -67,13 +69,33 @@
end
private
def self.root_directory
- @root_directory ||= PathComponent.new(config.script_path)
+ @root_directory ||= PathComponent.new(config.script_path, {:cache_to => self})
end
+ def self.cached_methods
+ @cached_methods ||= Hash.new
+ end
+
+ def self.reset_cached_methods
+ metaclass = class << self; self; end
+ cached_methods.each_key { |method| metaclass.send(:undef_method, method) }
+ cached_methods.clear
+ end
+
def root_directory
- @root_directory ||= PathComponent.new(config.script_path, {:config => config, :redis => redis})
+ @root_directory ||= PathComponent.new(config.script_path, {:cache_to => self, :config => config, :redis => redis})
+ end
+
+ def cached_methods
+ @cached_methods ||= Hash.new
+ end
+
+ def reset_cached_methods
+ metaclass = class << self; self; end
+ cached_methods.each_key { |method| metaclass.send(:undef_method, method) }
+ cached_methods.clear
end
end