class Pluggaloid::Event
Attributes
filter_another_thread[RW]
vm[RW]
options[RW]
オプション。以下のキーを持つHash
- :prototype
-
引数の数と型。Arrayで、type_strictが解釈できる条件を設定する
- :priority
-
Delayerの優先順位
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/pluggaloid/event.rb, line 13 def initialize(*args) super @options = {} @listeners = [] @filters = [] end
Private Class Methods
clear!()
click to toggle source
# File lib/pluggaloid/event.rb, line 102 def clear! @filter_another_thread = false __clear_aF4e__() end
Also aliased as: __clear_aF4e__
Public Instance Methods
add_filter(event_filter)
click to toggle source
イベントフィルタを追加する
Args¶ ↑
- event_filter
-
イベントフィルタ(Filter)
Return¶ ↑
self
# File lib/pluggaloid/event.rb, line 77 def add_filter(event_filter) unless event_filter.is_a? Pluggaloid::Filter raise Pluggaloid::ArgumentError, "First argument must be Pluggaloid::Filter, but given #{event_filter.class}." end @filters << event_filter self end
add_listener(listener)
click to toggle source
# File lib/pluggaloid/event.rb, line 60 def add_listener(listener) unless listener.is_a? Pluggaloid::Listener raise Pluggaloid::ArgumentError, "First argument must be Pluggaloid::Listener, but given #{listener.class}." end if @listeners.map(&:slug).include?(listener.slug) raise Pluggaloid::DuplicateListenerSlugError, "Listener slug #{listener.slug} already exists." end @listeners << listener self end
call(*args)
click to toggle source
イベントを引数 args で発生させる
Args¶ ↑
- *args
-
イベントの引数
Return¶ ↑
Delayerか、イベントを待ち受けているリスナがない場合はnil
# File lib/pluggaloid/event.rb, line 34 def call(*args) if self.class.filter_another_thread if @filters.empty? vm.Delayer.new(*Array(priority)) do call_all_listeners(args) end else Thread.new do filtered_args = filtering(*args) if filtered_args.is_a? Array vm.Delayer.new(*Array(priority)) do call_all_listeners(filtered_args) end end end end else vm.Delayer.new(*Array(priority)) do args = filtering(*args) if not @filters.empty? call_all_listeners(args) if args.is_a? Array end end end
delete_filter(event_filter)
click to toggle source
delete_listener(event_filter)
click to toggle source
# File lib/pluggaloid/event.rb, line 68 def delete_listener(event_filter) @listeners.delete(event_filter) self end
filtering(*args)
click to toggle source
priority()
click to toggle source
vm()
click to toggle source
# File lib/pluggaloid/event.rb, line 19 def vm self.class.vm end
Private Instance Methods
call_all_listeners(args)
click to toggle source
# File lib/pluggaloid/event.rb, line 93 def call_all_listeners(args) catch(:plugin_exit) do @listeners.each do |listener| listener.call(*args) end end end