wongi-engine 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/README.md +4 -0
- data/lib/wongi-engine/beta/ncc_partner.rb +5 -3
- data/lib/wongi-engine/token.rb +8 -0
- data/lib/wongi-engine/version.rb +1 -1
- data/spec/rule_specs/ncc_spec.rb +61 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ae5e5e3f2683835f9cc181b8c5edcf06245a61e
|
4
|
+
data.tar.gz: c6fe8127c68c416904044459132476b06fef46f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fc1bc5e6e5e85ee8a4282e4a56be5f2bd2c59e3d1c0dc23e60a85b5b97fe3d552798778f4cae4211a01fea1a400e4a0bac629cb11b34a3c0c586a7f37b34e8d
|
7
|
+
data.tar.gz: 01ab14f7f0e0616b26afd687ba060938154f5408c87b1944ed9e888ebf646839a2536854d579219b9254d8c48946b548e98a52e77908058cdd94ad26229c3c62
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
wongi-engine
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/README.md
CHANGED
@@ -448,6 +448,10 @@ The Rete implementation in this library largely follows the outline presented in
|
|
448
448
|
|
449
449
|
## Changelog
|
450
450
|
|
451
|
+
### 0.0.11
|
452
|
+
|
453
|
+
* fixed cleanup of invalidated NCC branches
|
454
|
+
|
451
455
|
### 0.0.10
|
452
456
|
|
453
457
|
* fixed interaction of filters and optional nodes
|
@@ -16,9 +16,11 @@ module Wongi
|
|
16
16
|
def beta_activate token
|
17
17
|
t = Token.new token, nil, {}
|
18
18
|
t.node = self
|
19
|
-
owner = ncc.tokens.find do |ncc_token|
|
20
|
-
|
21
|
-
end
|
19
|
+
# owner = ncc.tokens.find do |ncc_token|
|
20
|
+
# ncc_token.parent.node == divergent
|
21
|
+
# end
|
22
|
+
divergent_token = t.ancestors.find { |a| a.node == divergent }
|
23
|
+
owner = ncc.tokens.find { |o| o.parent == divergent_token }
|
22
24
|
if owner
|
23
25
|
owner.ncc_results << t
|
24
26
|
t.owner = owner
|
data/lib/wongi-engine/token.rb
CHANGED
@@ -24,6 +24,14 @@ module Wongi::Engine
|
|
24
24
|
wme.tokens << self if wme
|
25
25
|
end
|
26
26
|
|
27
|
+
def ancestors
|
28
|
+
if parent
|
29
|
+
parent.ancestors.unshift parent
|
30
|
+
else
|
31
|
+
[]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
27
35
|
def subst variable, value
|
28
36
|
@cached_assignments = nil
|
29
37
|
if @assignments.has_key? variable
|
data/lib/wongi-engine/version.rb
CHANGED
data/spec/rule_specs/ncc_spec.rb
CHANGED
@@ -60,5 +60,66 @@ describe "NCC rule" do
|
|
60
60
|
|
61
61
|
end
|
62
62
|
|
63
|
+
it 'should clean up correctly' do
|
64
|
+
|
65
|
+
engine.rule :rule1 do
|
66
|
+
forall {
|
67
|
+
has :light_kitchen, :value, :on
|
68
|
+
}
|
69
|
+
make {
|
70
|
+
#trace values: true, generation: true
|
71
|
+
gen self.name, :light_bathroom, :on
|
72
|
+
gen self.name, :want_action_for, :light_bathroom
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
prod = engine.rule "action" do
|
77
|
+
forall {
|
78
|
+
has :Requestor, :want_action_for, :Actor
|
79
|
+
has :Requestor, :Actor, :Value
|
80
|
+
has :Requestor, :priority, :Priority
|
81
|
+
ncc {
|
82
|
+
has :OtherRequestor, :want_action_for, :Actor
|
83
|
+
diff :OtherRequestor, :Requestor
|
84
|
+
has :OtherRequestor, :priority, :OtherPriority
|
85
|
+
greater :OtherPriority, :Priority
|
86
|
+
}
|
87
|
+
}
|
88
|
+
make {
|
89
|
+
#trace values: true, generation: true
|
90
|
+
gen :Actor, :value, :Value
|
91
|
+
gen :Actor, :last_user, :Requestor
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
engine << [:user, :priority, 1]
|
96
|
+
engine << [:rule1, :priority, 2]
|
97
|
+
engine << [:poweruser, :priority, 3]
|
98
|
+
engine << [:god, :priority, 4]
|
99
|
+
|
100
|
+
puts "<- MANUAL"
|
101
|
+
engine << [:user, :want_action_for, :light_bathroom]
|
102
|
+
engine << [:user, :light_bathroom, :off]
|
103
|
+
expect( engine.select(:light_bathroom, :value, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :value, :off) ]
|
104
|
+
expect( engine.select(:light_bathroom, :last_user, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :last_user, :user) ]
|
105
|
+
|
106
|
+
puts "\n<- AUTOMATIC"
|
107
|
+
engine << [:light_kitchen, :value, :on]
|
108
|
+
expect( engine.select(:light_bathroom, :value, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :value, :on) ]
|
109
|
+
expect( engine.select(:light_bathroom, :last_user, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :last_user, :rule1) ]
|
110
|
+
|
111
|
+
puts "\n<- POWER USER"
|
112
|
+
engine << [:poweruser, :want_action_for, :light_bathroom]
|
113
|
+
engine << [:poweruser, :light_bathroom, :super_on]
|
114
|
+
expect( engine.select(:light_bathroom, :value, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :value, :super_on) ]
|
115
|
+
expect( engine.select(:light_bathroom, :last_user, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :last_user, :poweruser) ]
|
116
|
+
|
117
|
+
puts "\n<- GOD"
|
118
|
+
engine << [:god, :want_action_for, :light_bathroom]
|
119
|
+
engine << [:god, :light_bathroom, :let_there_be_light]
|
120
|
+
expect( engine.select(:light_bathroom, :value, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :value, :let_there_be_light) ]
|
121
|
+
expect( engine.select(:light_bathroom, :last_user, :_) ).to be == [ Wongi::Engine::WME.new(:light_bathroom, :last_user, :god) ]
|
122
|
+
|
123
|
+
end
|
63
124
|
|
64
125
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wongi-engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valeri Sokolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A rule engine.
|
14
14
|
email:
|
@@ -17,7 +17,9 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
-
|
20
|
+
- .gitignore
|
21
|
+
- .ruby-gemset
|
22
|
+
- .ruby-version
|
21
23
|
- Gemfile
|
22
24
|
- LICENSE
|
23
25
|
- README.md
|
@@ -103,12 +105,12 @@ require_paths:
|
|
103
105
|
- lib
|
104
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
107
|
requirements:
|
106
|
-
- -
|
108
|
+
- - '>='
|
107
109
|
- !ruby/object:Gem::Version
|
108
110
|
version: '0'
|
109
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
112
|
requirements:
|
111
|
-
- -
|
113
|
+
- - '>='
|
112
114
|
- !ruby/object:Gem::Version
|
113
115
|
version: '0'
|
114
116
|
requirements: []
|