class Tengine::Core::Handler::Visitor
HashとArrayで入れ子になったfilterのツリーをルートから各Leafの方向に辿っていくVisitorです。 正確にはVisitorパターンではないのですが、似ているのでメタファとしてVisitorとしました。
Public Class Methods
new(filter, event, session)
click to toggle source
# File lib/tengine/core/handler.rb, line 101 def initialize(filter, event, session) @filter = filter @event = event @session = Tengine::Core::SessionWrapper.new(session) @session_reloaded = false @current = @filter end
Public Instance Methods
and()
click to toggle source
# File lib/tengine/core/handler.rb, line 133 def and children = @current["children"] # children.all?{|child| backup_current(child){ visit }} # これだと全てのchildrenについて評価せずfalseがあったら処理を抜けてしまいます。 children.map{|child| backup_current(child){ visit }}.all? end
backup_current(node) { || ... }
click to toggle source
# File lib/tengine/core/handler.rb, line 123 def backup_current(node) backup = @current @current = node begin return yield ensure @current = backup end end
find_or_mark_in_session()
click to toggle source
# File lib/tengine/core/handler.rb, line 139 def find_or_mark_in_session name = @current['pattern'].to_s key = "mark_#{name}" if name == @event.event_type_name if session.system_properties[key].nil? session.system_update(key => true) Tengine.logger.debug("session.system_updated #{session.system_properties.inspect}") end return true else return session.system_properties[key] end end
match_source_name?()
click to toggle source
# File lib/tengine/core/handler.rb, line 153 def match_source_name? pattern = @current['pattern'] @event.source_name.include?(pattern) end
session()
click to toggle source
# File lib/tengine/core/handler.rb, line 109 def session unless @session_reloaded @session.reload @session_reloaded = true end @session end
visit()
click to toggle source
# File lib/tengine/core/handler.rb, line 118 def visit Tengine.logger.debug("visiting #{@current.inspect}") send(@current['method']) end