Class: PhusionPassenger::Plugin
- Defined in:
- lib/phusion_passenger/plugin.rb
Constant Summary collapse
- @@hooks =
{}
- @@classes =
{}
Class Method Summary collapse
- .call_hook(name, *args, &block) ⇒ Object
- .load(name, load_once = true) ⇒ Object
- .register(name, klass) ⇒ Object
- .register_hook(name, &block) ⇒ Object
Instance Method Summary collapse
- #call_hook(name, *args, &block) ⇒ Object
-
#initialize(name, *args, &block) ⇒ Plugin
constructor
A new instance of Plugin.
Constructor Details
#initialize(name, *args, &block) ⇒ Plugin
Returns a new instance of Plugin.
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/phusion_passenger/plugin.rb', line 71 def initialize(name, *args, &block) Plugin.load(name) classes = @@classes[name] if classes @instances = classes.map do |klass| klass.new(*args, &block) end else return nil end end |
Class Method Details
.call_hook(name, *args, &block) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/phusion_passenger/plugin.rb', line 56 def self.call_hook(name, *args, &block) last_result = nil if (hooks_list = @@hooks[name]) hooks_list.each do |callback| last_result = callback.call(*args, &block) end end return last_result end |
.load(name, load_once = true) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/phusion_passenger/plugin.rb', line 33 def self.load(name, load_once = true) PLUGIN_DIRS.each do |plugin_dir| if plugin_dir =~ /\A~/ # File.expand_path uses ENV['HOME'] which we don't want. home = Etc.getpwuid(Process.uid).dir plugin_dir = plugin_dir.sub(/\A~/, home) end plugin_dir = File.(plugin_dir) Dir["#{plugin_dir}/*/#{name}.rb"].each do |filename| if load_once require(filename) else load(filename) end end end end |
.register(name, klass) ⇒ Object
66 67 68 69 |
# File 'lib/phusion_passenger/plugin.rb', line 66 def self.register(name, klass) classes = (@@classes[name] ||= []) classes << klass end |
.register_hook(name, &block) ⇒ Object
51 52 53 54 |
# File 'lib/phusion_passenger/plugin.rb', line 51 def self.register_hook(name, &block) hooks_list = (@@hooks[name] ||= []) hooks_list << block end |
Instance Method Details
#call_hook(name, *args, &block) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/phusion_passenger/plugin.rb', line 83 def call_hook(name, *args, &block) last_result = nil if @instances @instances.each do |instance| if instance.respond_to?(name.to_sym) last_result = instance.__send__(name.to_sym, *args, &block) end end end return last_result end |