Class: Adhearsion::Plugin
- Defined in:
- lib/adhearsion/plugin.rb,
lib/adhearsion/plugin/collection.rb,
lib/adhearsion/plugin/initializer.rb
Overview
Plugin is the core of extension of Adhearsion framework and provides the easiest path to add new functionality, configuration or modify the initialization process.
Its behavior is based on Rails::Railtie, so if you are familiar with Rails this will be easier for you to start using Adhearsion::Plugin, but of course no previous knowledge is required.
With an Adhearsion Plugin you can:
-
create initializers
-
add rake tasks to Adhearsion
-
add/modify configuration files
How to create your Adhearsion Plugin
Create a class that inherits from Adhearsion::Plugin within your plugin namespace. This class shall be loaded during your awesome Adhearsion application boot process.
# lib/my_plugin/plugin.rb
module MyPlugin
class Plugin < Adhearsion::Plugin
end
end
Execute a specific code while initializing Adhearison
module MyPlugin
class Plugin < Adhearsion::Plugin
init :my_plugin do
logger.warn "I want to ensure my plugin is being loaded!!!"
end
end
end
As Rails::Railtie does, you can define the exact point when you want to load your plugin during the initialization process.
module MyPlugin
class Plugin < Adhearsion::Plugin
init :my_plugin, :after => :my_other_plugin do
logger.warn "My Plugin depends on My Other Plugin, so it must be loaded after"
end
end
end
Direct Known Subclasses
Defined Under Namespace
Classes: Collection, Initializer
Constant Summary collapse
- METHODS_OPTIONS =
{:load => true, :scope => false}
Class Method Summary collapse
- .add(klass) ⇒ Object
-
.config(name = nil, &block) ⇒ Object
Class method that will be used by subclasses to configure the plugin.
- .configs ⇒ Object
- .configure_plugins(*args) ⇒ Object
- .count ⇒ Object
- .delete(plugin_name) ⇒ Object
- .delete_all ⇒ Object
-
.generators(mapping) ⇒ Object
Register generator classes.
-
.init(name = nil, opts = {}, &block) ⇒ Object
Class method that will be used by subclasses to initialize the plugin.
-
.init_plugins(*args) ⇒ Object
Recursively initialization of all the loaded plugins.
- .initializers ⇒ Object
- .load_tasks ⇒ Object
- .plugin_name(name = nil) ⇒ Object
- .plugin_name=(name) ⇒ Object
- .reset_rake_tasks ⇒ Object
-
.run(name = nil, opts = {}, &block) ⇒ Object
Class method that will be used by subclasses to run the plugin.
- .run_plugins(*args) ⇒ Object
- .runners ⇒ Object
- .show_description ⇒ Object
- .subclasses ⇒ Object
-
.tasks ⇒ Object
Class method that allows any subclass (any Adhearsion plugin) to register rake tasks.
Class Method Details
.add(klass) ⇒ Object
232 233 234 |
# File 'lib/adhearsion/plugin.rb', line 232 def add(klass) klass.ancestors.include?(self) and subclasses << klass end |
.config(name = nil, &block) ⇒ Object
Class method that will be used by subclasses to configure the plugin
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/adhearsion/plugin.rb', line 149 def config(name = nil, &block) if name.nil? name = self.plugin_name else self.plugin_name = name end if block_given? opts = {} opts[:after] ||= configs.last.name unless configs.empty? ::Loquacious::Configuration.defaults_for plugin_name, &Proc.new initializer = Initializer.new(plugin_name, self, opts) do ::Loquacious.configuration_for plugin_name, &block end Adhearsion::Plugin.configs << initializer else ::Loquacious.configuration_for plugin_name end end |
.configs ⇒ Object
192 193 194 |
# File 'lib/adhearsion/plugin.rb', line 192 def configs @configs ||= Collection.new end |
.configure_plugins(*args) ⇒ Object
173 174 175 176 177 |
# File 'lib/adhearsion/plugin.rb', line 173 def configure_plugins(*args) configs.tsort.each do |config| config.run(*args) end end |
.count ⇒ Object
228 229 230 |
# File 'lib/adhearsion/plugin.rb', line 228 def count subclasses.length end |
.delete(plugin_name) ⇒ Object
236 237 238 239 |
# File 'lib/adhearsion/plugin.rb', line 236 def delete(plugin_name) plugin_name.ancestors.include?(self) and plugin_name = plugin_name.plugin_name subclasses.delete_if { |plugin| plugin.plugin_name.eql? plugin_name } end |
.delete_all ⇒ Object
241 242 243 |
# File 'lib/adhearsion/plugin.rb', line 241 def delete_all @subclasses = nil end |
.generators(mapping) ⇒ Object
Register generator classes
120 121 122 123 124 |
# File 'lib/adhearsion/plugin.rb', line 120 def generators(mapping) mapping.each_pair do |name, klass| Generators.add_generator name, klass end end |
.init(name = nil, opts = {}, &block) ⇒ Object
Class method that will be used by subclasses to initialize the plugin
209 210 211 212 213 214 |
# File 'lib/adhearsion/plugin.rb', line 209 def init(name = nil, opts = {}, &block) name = plugin_name unless name block_given? or raise ArgumentError, "A block must be passed while defining the Plugin initialization process" opts[:after] ||= initializers.last.name unless initializers.empty? || initializers.find { |i| i.name == opts[:before] } Adhearsion::Plugin.initializers << Initializer.new(name, self, opts, &block) end |
.init_plugins(*args) ⇒ Object
Recursively initialization of all the loaded plugins
180 181 182 183 184 |
# File 'lib/adhearsion/plugin.rb', line 180 def init_plugins(*args) initializers.tsort.each do |initializer| initializer.run(*args) end end |
.initializers ⇒ Object
196 197 198 |
# File 'lib/adhearsion/plugin.rb', line 196 def initializers @initializers ||= Collection.new end |
.load_tasks ⇒ Object
105 106 107 108 109 110 |
# File 'lib/adhearsion/plugin.rb', line 105 def load_tasks container = Object.new.tap { |o| o.extend Rake::DSL if defined? Rake::DSL } tasks.each do |block| container.instance_eval(&block) end end |
.plugin_name(name = nil) ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/adhearsion/plugin.rb', line 135 def plugin_name(name = nil) if name.nil? @plugin_name ||= ActiveSupport::Inflector.underscore(self.name) else self.plugin_name = name end end |
.plugin_name=(name) ⇒ Object
143 144 145 |
# File 'lib/adhearsion/plugin.rb', line 143 def plugin_name=(name) @plugin_name = name end |
.reset_rake_tasks ⇒ Object
101 102 103 |
# File 'lib/adhearsion/plugin.rb', line 101 def reset_rake_tasks @@rake_tasks = [] end |
.run(name = nil, opts = {}, &block) ⇒ Object
Class method that will be used by subclasses to run the plugin
221 222 223 224 225 226 |
# File 'lib/adhearsion/plugin.rb', line 221 def run(name = nil, opts = {}, &block) name = plugin_name unless name block_given? or raise ArgumentError, "A block must be passed while defining the Plugin run process" opts[:after] ||= runners.last.name unless runners.empty? || runners.find { |i| i.name == opts[:before] } Adhearsion::Plugin.runners << Initializer.new(name, self, opts, &block) end |
.run_plugins(*args) ⇒ Object
186 187 188 189 190 |
# File 'lib/adhearsion/plugin.rb', line 186 def run_plugins(*args) runners.tsort.each do |runner| runner.run(*args) end end |
.runners ⇒ Object
200 201 202 |
# File 'lib/adhearsion/plugin.rb', line 200 def runners @runners ||= Collection.new end |
.show_description ⇒ Object
169 170 171 |
# File 'lib/adhearsion/plugin.rb', line 169 def show_description ::Loquacious::Configuration.help_for plugin_name end |
.subclasses ⇒ Object
126 127 128 |
# File 'lib/adhearsion/plugin.rb', line 126 def subclasses @subclasses ||= [] end |
.tasks ⇒ Object
Class method that allows any subclass (any Adhearsion plugin) to register rake tasks.
-
Example 1:
FooBar = Class.new Adhearsion::Plugin do tasks do namespace :foo_bar do desc "Prints the FooBar plugin version" task :version do STDOUT.puts "FooBar plugin v0.1" end end end end
-
Example 2:
FooBar = Class.new Adhearsion::Plugin do tasks do load "tasks/foo_bar.rake" end end = tasks/foo_bar.rake namespace :foo_bar do desc "Prints the FooBar plugin version" task :version do STDOUT.puts "FooBar plugin v0.1" end end
96 97 98 99 |
# File 'lib/adhearsion/plugin.rb', line 96 def tasks @@rake_tasks << Proc.new if block_given? @@rake_tasks end |