Class: Pluggaloid::HandlerTag

Inherits:
Identity
  • Object
show all
Includes:
Enumerable
Defined in:
lib/pluggaloid/handler_tag.rb

Overview

リスナをまとめて管理するプラグイン

Pluggaloid::Listener や、 Pluggaloid::Filter をまとめて扱うための仕組み。Pluggaloid::Plugin#add_event などの引数 tags: に、このインスタンスを設定する。

インスタンスの作成

Pluggaloid::Plugin#handler_tag を使って生成する。 Pluggaloid::HandlerTag のplugin: 引数には、レシーバ(Pluggaloid::Plugin)が渡される。Pluggaloid::HandlerTag は、このプラグインの中でだけ使える。複数のプラグインのリスナをまとめて管理することはできない。

リスナにタグをつける

Pluggaloid::Plugin#add_event または Pluggaloid::Plugin#add_event_filter のtags: 引数にこれのインスタンスを渡す。

このタグがついたListenerやFilterを取得する

Enumerable をincludeしていて、リスナやフィルタを取得することができる。また、

  • Pluggaloid::HandlerTag#listeners で、 Pluggaloid::Listener だけ

  • Pluggaloid::HandlerTag#filters で、 Pluggaloid::Filter だけ

を対象にした Enumerator を取得することができる

このタグがついたリスナを全てdetachする

Pluggaloid::Plugin#detach の第一引数に Pluggaloid::HandlerTag のインスタンスを渡すことで、そのHandlerTagがついたListener、Filterは全てデタッチされる

Instance Attribute Summary

Attributes inherited from Identity

#name, #slug

Instance Method Summary collapse

Methods inherited from Identity

#inspect

Constructor Details

#initialize(plugin:, **kwrest) ⇒ HandlerTag

Args

name:

タグの名前(String | nil)



43
44
45
46
# File 'lib/pluggaloid/handler_tag.rb', line 43

def initialize(plugin:, **kwrest)
  super(**kwrest)
  @plugin = plugin
end

Instance Method Details

#each(&block) ⇒ Object

このTagがついている Pluggaloid::Listener と Pluggaloid::Filter を全て列挙する

Return

Enumerable



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/pluggaloid/handler_tag.rb', line 51

def each(&block)
  if block
    Enumerator.new do |y|
      listeners{|x| y << x }
      filters{|x| y << x }
    end.each(&block)
  else
    Enumerator.new do |y|
      listeners{|x| y << x }
      filters{|x| y << x }
    end
  end
end

#filters(&block) ⇒ Object

このTagがついている Pluggaloid::Filter を全て列挙する

Return

Enumerable



79
80
81
82
83
84
85
# File 'lib/pluggaloid/handler_tag.rb', line 79

def filters(&block)
  if block
    filters.each(&block)
  else
    @plugin.to_enum(:filters).lazy.select{|l| l.tags.include?(self) }
  end
end

#listeners(&block) ⇒ Object

このTagがついている Pluggaloid::Listener を全て列挙する

Return

Enumerable



68
69
70
71
72
73
74
# File 'lib/pluggaloid/handler_tag.rb', line 68

def listeners(&block)
  if block
    listeners.each(&block)
  else
    @plugin.to_enum(:listeners).lazy.select{|l| l.tags.include?(self) }
  end
end