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

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

Returns:

  • (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_namespaceObject

should be overridden



7
8
9
# File 'lib/xrbp/plugins/has_plugin.rb', line 7

def plugin_namespace
  raise
end

#pluginsObject



11
12
13
# File 'lib/xrbp/plugins/has_plugin.rb', line 11

def plugins
  @plugins ||= []
end