class Wongi::Engine::DSL::Action::StatementGenerator
Public Class Methods
new(template)
click to toggle source
# File lib/wongi-engine/dsl/action/statement_generator.rb, line 5 def initialize template @template = template end
Public Instance Methods
deexecute(token)
click to toggle source
# File lib/wongi-engine/dsl/action/statement_generator.rb, line 34 def deexecute token token.generated_wmes.reject( &:manual? ).inject( [] ) do |list, wme| list.tap do |l| wme.generating_tokens.delete token l << wme if wme.generating_tokens.empty? end end.each do |wme| wme.overlay.retract wme, automatic: true end end
execute(token)
click to toggle source
# File lib/wongi-engine/dsl/action/statement_generator.rb, line 9 def execute token subject, predicate, object = @template.resolve!(token) # link to rete here to ensure proper linking with token wme = WME.new subject, predicate, object, rete wme.manual = false wme.overlay = token.overlay production.tracer.trace( action: self, wme: wme ) if production.tracer if existing = rete.exists?( wme ) generated = existing.generating_tokens.size if generated > 0 && ! token.generated_wmes.include?( existing ) token.generated_wmes << existing existing.generating_tokens << token end else token.generated_wmes << wme wme.generating_tokens << token # this MUST be done after we link the wme and the token # in order for neg rule invalidation to work wme.overlay.assert wme end end