Class: Wongi::Engine::Template
- Inherits:
-
Struct
- Object
- Struct
- Wongi::Engine::Template
show all
- Includes:
- CoreExt
- Defined in:
- lib/wongi-engine/template.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from CoreExt
included
Constructor Details
#initialize(s, p, o, options = { }) ⇒ Template
Returns a new instance of Template.
14
15
16
17
18
19
20
21
22
|
# File 'lib/wongi-engine/template.rb', line 14
def initialize s, p, o, options = { }
time = options[:time] || 0
unsafe = options[:unsafe] || false
raise "Cannot work with continuous time" unless time.integer?
raise "Cannot look into the future" if time > 0
super( s, p, o, time )
@filters = []
@unsafe = unsafe
end
|
Instance Attribute Details
#filters ⇒ Object
Returns the value of attribute filters.
7
8
9
|
# File 'lib/wongi-engine/template.rb', line 7
def filters
@filters
end
|
#object ⇒ Object
Returns the value of attribute object
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def object
@object
end
|
#predicate ⇒ Object
Returns the value of attribute predicate
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def predicate
@predicate
end
|
#subject ⇒ Object
Returns the value of attribute subject
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def subject
@subject
end
|
#time ⇒ Object
Returns the value of attribute time
3
4
5
|
# File 'lib/wongi-engine/template.rb', line 3
def time
@time
end
|
#unsafe ⇒ Object
Returns the value of attribute unsafe.
7
8
9
|
# File 'lib/wongi-engine/template.rb', line 7
def unsafe
@unsafe
end
|
Class Method Details
.hash_for(*args) ⇒ Object
46
47
48
|
# File 'lib/wongi-engine/template.rb', line 46
def self.hash_for *args
args.map( &:hash ).hash
end
|
.variable?(thing) ⇒ Boolean
10
11
12
|
# File 'lib/wongi-engine/template.rb', line 10
def self.variable? thing
Symbol === thing && thing =~ /^[A-Z]/
end
|
Instance Method Details
#==(other) ⇒ Object
54
55
56
57
|
# File 'lib/wongi-engine/template.rb', line 54
def == other
return false unless Template === other
subject == other.subject && predicate == other.predicate && object == other.object
end
|
#===(wme) ⇒ Object
50
51
52
|
# File 'lib/wongi-engine/template.rb', line 50
def === wme
wme =~ self if WME === wme
end
|
#=~(template) ⇒ Object
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/wongi-engine/template.rb', line 59
def =~ template
case template
when Template
( template.subject == :_ || template.subject == subject ) &&
( template.predicate == :_ || template.predicate == predicate ) &&
( template.object == :_ || template.object == object )
else
raise "Templates can only match templates"
end
end
|
#compile(context) ⇒ Object
71
72
73
74
75
76
77
|
# File 'lib/wongi-engine/template.rb', line 71
def compile context
tests, assignment = *JoinNode.compile( self, context.earlier, context.parameters )
alpha = context.rete.compile_alpha( self )
context.node = context.node.beta_memory.join_node( alpha, tests, assignment, @filters, context.alpha_deaf )
context.earlier << self
context
end
|
#contains?(var) ⇒ Boolean
38
39
40
|
# File 'lib/wongi-engine/template.rb', line 38
def contains? var
self.class.variable?( var ) && array_form.include?( var )
end
|
#hash ⇒ Object
42
43
44
|
# File 'lib/wongi-engine/template.rb', line 42
def hash
@hash ||= array_form.map( &:hash ).hash
end
|
#import_into(r) ⇒ Object
24
25
26
27
28
|
# File 'lib/wongi-engine/template.rb', line 24
def import_into r
copy = self.class.new r.import( subject ), r.import( predicate ), r.import( object ), time: time, unsafe: unsafe
@filters.each { |f| copy.filters << f }
copy
end
|
#inspect ⇒ Object
79
80
81
|
# File 'lib/wongi-engine/template.rb', line 79
def inspect
"<~ #{subject.inspect} #{predicate.inspect} #{object.inspect} #{time}>"
end
|
#root? ⇒ Boolean
30
31
32
|
# File 'lib/wongi-engine/template.rb', line 30
def root?
subject == :_ && predicate == :_ && object == :_
end
|
#to_s ⇒ Object
83
84
85
|
# File 'lib/wongi-engine/template.rb', line 83
def to_s
inspect
end
|
#variables ⇒ Object
34
35
36
|
# File 'lib/wongi-engine/template.rb', line 34
def variables
array_form.select { |e| self.class.variable? e }
end
|