Module: XRBP::HasPlugin
- Included in:
- WebClient::Connection, WebSocket::Connection, WebSocket::MultiConnection
- Defined in:
- lib/xrbp/plugins/has_plugin.rb
Overview
Helper mixin provding plugin management capabilities.
Instance Method Summary collapse
- #add_plugin(*plgs) ⇒ Object
- #define_instance_method(name, &block) ⇒ Object
- #plugin(plg) ⇒ Object
- #plugin?(plg) ⇒ Boolean
-
#plugin_namespace ⇒ Object
should be overridden.
- #plugins ⇒ Object
Instance Method Details
#add_plugin(*plgs) ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 15 def add_plugin(*plgs) plgs.each { |plg| plg = plugin_namespace.plugins[plg] if plg.is_a?(Symbol) raise ArgumentError unless !!plg plg = plg.new(self) plugins << plg plg.added if plg.respond_to?(:added) } end |
#define_instance_method(name, &block) ⇒ Object
39 40 41 42 43 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 39 def define_instance_method(name, &block) (class << self; self; end).class_eval do define_method name, &block end end |
#plugin(plg) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 31 def plugin(plg) cls = plugin_namespace.plugins[plg] plugins.find { |_plg| (plg.is_a?(Class) && _plg.kind_of?(plg)) || (cls.is_a?(Class) && _plg.class.kind_of?(cls)) } end |
#plugin?(plg) ⇒ Boolean
25 26 27 28 29 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 25 def plugin?(plg) clss = plugins.collect { |plg| plg.class } cls = plugin_namespace.plugins[plg] clss.include?(plg) || clss.include?(cls) end |
#plugin_namespace ⇒ Object
should be overridden
7 8 9 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 7 def plugin_namespace raise end |
#plugins ⇒ Object
11 12 13 |
# File 'lib/xrbp/plugins/has_plugin.rb', line 11 def plugins @plugins ||= [] end |