wongi-engine 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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