wongi-engine 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ef395363d21e3d9fadcc8e6ce974c293b31c189
4
- data.tar.gz: 65eb91be6334df92643463f6dee220a3467d3e8a
3
+ metadata.gz: ae02e0d5aacdbab891830af73becded445cda3c2
4
+ data.tar.gz: 7410f6c1af9a8899d2b67f9e07815348e20b0248
5
5
  SHA512:
6
- metadata.gz: 9b88eb68e39323b45e3b3e6c5ed291f78dc31512096a557f750c5ffa3f840025b31b844b10d4abc2de7b8667809c2f68fff995a366074032c20e7c51833256a8
7
- data.tar.gz: eaa26f530def7d9cd1cce40f0169b5e3ecec43d9e097cc02f911ac25ec03d35c3534a49ea631ab411e8ce909917e85d90429879eeda8c0410bcb9bb58ae5594e
6
+ metadata.gz: d30014e3145febf0ed88ff363dfc019392572917413d398015e66a7290ec37ac2906f1fe1a9ea8b1c441f89afc4cfa8fc49f4db6e7ac365a70dbdf9b71dc23c6
7
+ data.tar.gz: 86b5e6adfe13f547001413ff898207f64f3e94eadaae80dc11744141dbd9dd916a34d55f23abd435114378f324f4af8a281650b678cb13a6c0baafa1d1e33bdd
@@ -1,12 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - 2.0.0
5
- - 2.1.7
6
- - 2.2.3
7
- - rbx-2.4.1
4
+ - 2.0
5
+ - 2.1
6
+ - 2.2
8
7
  - rbx-2.5.8
9
- - jruby-19mode
8
+ - jruby-9.0
10
9
  sudo: false
11
10
  notifications:
12
11
  hipchat:
data/README.md CHANGED
@@ -24,6 +24,10 @@ The Rete implementation in this library largely follows the outline presented in
24
24
 
25
25
  ## Changelog
26
26
 
27
+ ### 0.2.1
28
+
29
+ * data overlay fixes
30
+
27
31
  ### 0.2.0
28
32
 
29
33
  * refactored compilation code
@@ -12,6 +12,7 @@ module Wongi::Engine
12
12
  # link to rete here to ensure proper linking with token
13
13
  wme = WME.new subject, predicate, object, rete
14
14
  wme.manual = false
15
+ wme.overlay = token.overlay
15
16
 
16
17
  production.tracer.trace( action: self, wme: wme ) if production.tracer
17
18
  if existing = rete.exists?( wme )
@@ -25,7 +26,7 @@ module Wongi::Engine
25
26
  wme.generating_tokens << token
26
27
  # this MUST be done after we link the wme and the token
27
28
  # in order for neg rule invalidation to work
28
- rete << wme
29
+ wme.overlay.assert wme
29
30
  end
30
31
 
31
32
  end
@@ -37,7 +38,7 @@ module Wongi::Engine
37
38
  l << wme if wme.generating_tokens.empty?
38
39
  end
39
40
  end.each do |wme|
40
- rete.retract wme, automatic: true
41
+ wme.overlay.retract wme, automatic: true
41
42
  end
42
43
  end
43
44
  end
@@ -100,6 +100,11 @@ module Wongi::Engine
100
100
  overlays.delete(o) unless o == default_overlay
101
101
  end
102
102
 
103
+ # @private
104
+ def current_overlay
105
+ overlays.last
106
+ end
107
+
103
108
  # @private
104
109
  def overlays
105
110
  @overlays ||= []
@@ -312,14 +317,16 @@ module Wongi::Engine
312
317
  end
313
318
  no_check = s == :_ && p == :_ && o == :_
314
319
  template = Template.new(s, p, o).import_into self
315
- alpha_top.wmes.each do |wme|
320
+ source = best_alpha(template)
321
+ current_overlay.wmes(source).each do |wme|
316
322
  yield wme if (no_check || wme =~ template)
317
323
  end
318
324
  end
319
325
 
320
326
  def select s, p, o
321
327
  template = Template.new(s, p, o)
322
- matching = alpha_top.wmes.select { |wme| wme =~ template }
328
+ source = best_alpha(template)
329
+ matching = current_overlay.wmes(source).select { |wme| wme =~ template }
323
330
  if block_given?
324
331
  matching.each { |st| yield st.subject, st.predicate, st.object }
325
332
  end
@@ -330,7 +337,7 @@ module Wongi::Engine
330
337
  template = Template.new(s, p, o)
331
338
  source = best_alpha(template)
332
339
  # puts "looking for #{template} among #{source.wmes.size} triples of #{source.template}"
333
- source.wmes.detect { |wme| wme =~ template }
340
+ current_overlay.wmes(source).find { |wme| wme =~ template }
334
341
  end
335
342
 
336
343
  protected
@@ -18,7 +18,7 @@ module Wongi::Engine
18
18
 
19
19
  def initialize node, token, wme, assignments
20
20
  @node, @parent, @wme, @assignments = node, token, wme, assignments
21
- @overlay = wme ? wme.overlay.highest(token.overlay) : node.rete.default_overlay
21
+ @overlay = wme ? wme.overlay.highest(token.overlay) : (token ? token.overlay : node.rete.default_overlay)
22
22
  @children = []
23
23
  @deleted = false
24
24
  @neg_join_results = []
@@ -1,5 +1,5 @@
1
1
  module Wongi
2
2
  module Engine
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -16,7 +16,46 @@ describe Wongi::Engine::DataOverlay do
16
16
  expect(production).to have(1).token
17
17
  }
18
18
  expect(production).to have(0).tokens
19
+ end
20
+
21
+ it 'should generate into correct overlays' do
22
+ production = engine << rule {
23
+ forall {
24
+ has 1, 2, :X
25
+ }
26
+ make {
27
+ gen :X, 4, 5
28
+ }
29
+ }
30
+ engine.with_overlay { |overlay|
31
+ overlay << [1,2,3]
32
+ expect(production).to have(1).token
33
+ expect(engine.find(3, 4, 5)).not_to be_nil
34
+ }
35
+ expect(production).to have(0).tokens
36
+ expect(engine.find(3, 4, 5)).to be_nil
37
+ end
19
38
 
39
+ it 'works with assignments' do
40
+ production = engine << rule {
41
+ forall {
42
+ has 1, 2, :X
43
+ assign(:Something) { 6 }
44
+ }
45
+ make {
46
+ collect :Something, :stuff
47
+ gen :person, 'stuff', :Something
48
+ }
49
+ }
50
+
51
+ engine.with_overlay { |overlay|
52
+ overlay << [1,2,3]
53
+ expect(production).to have(1).token
54
+ expect(engine.find(:_, :_, :_)).not_to be_nil
55
+ }
56
+
57
+ expect(production).to have(0).tokens
58
+ expect(engine.find(:_, :_, :_)).to be_nil
20
59
  end
21
60
 
22
61
  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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valeri Sokolov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-05 00:00:00.000000000 Z
11
+ date: 2015-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake