Class: Tengine::Core::Handler::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/tengine/core/handler.rb

Overview

HashとArrayで入れ子になったfilterのツリーをルートから各Leafの方向に辿っていくVisitorです。 正確にはVisitorパターンではないのですが、似ているのでメタファとしてVisitorとしました。

Instance Method Summary collapse

Constructor Details

#initialize(filter, event, session) ⇒ Visitor

Returns a new instance of Visitor.



102
103
104
105
106
107
108
# File 'lib/tengine/core/handler.rb', line 102

def initialize(filter, event, session)
  @filter = filter
  @event = event
  @session = Tengine::Core::SessionWrapper.new(session)
  @session_reloaded = false
  @current = @filter
end

Instance Method Details

#andObject



134
135
136
137
138
# File 'lib/tengine/core/handler.rb', line 134

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) ⇒ Object



124
125
126
127
128
129
130
131
132
# File 'lib/tengine/core/handler.rb', line 124

def backup_current(node)
  backup = @current
  @current = node
  begin
    return yield
  ensure
    @current = backup
  end
end

#find_or_mark_in_sessionObject



140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/tengine/core/handler.rb', line 140

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?Boolean

Returns:

  • (Boolean)


154
155
156
157
# File 'lib/tengine/core/handler.rb', line 154

def match_source_name?
  pattern = @current['pattern']
  @event.source_name.include?(pattern)
end

#sessionObject



110
111
112
113
114
115
116
# File 'lib/tengine/core/handler.rb', line 110

def session
  unless @session_reloaded
    @session.reload
    @session_reloaded = true
  end
  @session
end

#visitObject



119
120
121
122
# File 'lib/tengine/core/handler.rb', line 119

def visit
  Tengine.logger.debug("visiting #{@current.inspect}")
  send(@current['method'])
end